Compartilhando conhecimento com o mundo

Com tecnologia do Blogger.

Pesquisa

Download

Blogger Tricks

Blogger Themes

Visitas

Assuntos

11/19/2013

Tempo de Execução do Update Estatistic - Informix


A instrução UPDATE STATISTICS atualiza estatísticas nos catálogos do sistema. O otimizador usa essas estatísticas para determinar o plano de consulta de menor custo. Aqui onde trabalho os bancos são muito grandes eu criei um jeito de monitorar a hora de inicio e final e contar quantos segundos rodou o update statistic de cada banco, para fazer isso criei dois script para fazer isso e salvar em um determinado arquivo esses dados, com esses dados consegui ver quais eram os bancos que mais demoravam e fazer alguns ajustes;

Script do Update Statistic
#!/bin/ksh
# ============================================================================
#  Atualizado   : 27/01/2012 
#  Objetivo     : Executa o Update Statistics dos bancos
# ============================================================================

export INFORMIXDIR=/opt/informix
export INFORMIXSERVER=sefaz_sig
export PATH=$PATH:$INFORMIXDIR/bin:/export/home/informix/utils2
export LD_LIBRARY_PATH=/opt/informix/lib/:/opt/informix/lib/esql/:/opt/informix/lib/tools/
export PSORT_NPROCS=6 
export PSORT_DBTEMP=/tmp
export STATCHANGE=8 

date=`date  +%d.%m.%Y-%H:%m:%S`;
dia=`date  +%Y.%m.%d`;

cd /export/home/informix/utils2
echo '--- Inicio ---:' $date >>         /export/home/informix/logs/Updstats/log2_$dia

#--- Executa Update statistics dos databases
# ============================================================================
# ============================================================================

./up_rodar_dostats2_1.sh                                        # Grava a hora que comecou o UPDATE STATISTIC

# ============================================================================
# ============================================================================

./up_ods_fazenda1.sh;                                           # Grava a hora que comecou o UPDATE STATISTIC banco ODS_FAZENDA
./drive_dostats 10 ods_fazenda -Q 5                             >> /export/home/informix/logs/Updstats/log2_$dia
./up_ods_fazenda2.sh;                                           # Grava a hora que terminou o UPDATE STATISTIC banco ODS_FAZENDA

# ============================================================================
# ============================================================================

./up_faz_desenv_1.sh;                                           # Grava a hora que comecou o UPDATE STATISTIC banco FAZ_DESENV
./drive_dostats 10 faz_desenv -Q 5 --drop-distributions         >> /export/home/informix/logs/Updstats/log2_$dia
./up_faz_desenv_2.sh;                                           # Grava a hora que terminou o UPDATE STATISTIC banco FAZ_DESENV

# ============================================================================
# ============================================================================

./up_dw_sig1.sh                                                 # Grava a hora que comecou o UPDATE STATISTIC banco DW_SIG
./drive_dostats 10 dw_sig -Q 5 --drop-distributions             >> /export/home/informix/logs/Updstats/log2_$dia
./up_dw_sig2.sh                                                 # Grava a hora que terminou o UPDATE STATISTIC banco DW_SIG

# ============================================================================
# ============================================================================

./up_rodar_dostats2_2.sh                                       # Grava a hora que terminou o Update statistic

# ============================================================================
# ============================================================================

date=`date  +%d.%m.%Y-%H:%m:%S`;
echo '--- Termino ---: '                                        >> /export/home/informix/utils2/logs/log2_$dia
date                                                            >>  /export/home/informix/utils2/logs/log2_$dia

exit
Script 1 - pega a hora de inicio - banco ods_fazenda - up_ods_fazenda1.sh

# ---------------------------------------------------------------------------------
# calcula quantidade de horas que rodou o update statistic o ods_fazenda
# ---------------------------------------------------------------------------------
echo "$(date +%s)"                                                 > /export/home/informix/logs/update_statistic/calculo_ods_fazenda.log
echo -n "ODS_FAZENDA      - $(date '+%d/%m/%Y - %H:%M:%S')"            >> /export/home/informix/logs/update_statistic/ods_fazenda.log
Script 2 - pega a hora de termino e faz o calculo dos segundos que ele rodou - banco ods_fazenda - up_ods_fazenda2.sh
# ---------------------------------------------------------------------------------
# calcula quantidade de horas que rodou o update statistic o ods_fazenda
# ---------------------------------------------------------------------------------
START=$(cat /export/home/informix/logs/update_statistic/calculo_ods_fazenda.log)

END=$(date +%s)
DIFF=$(( $END - $START ))
echo -n " - $(date '+%H:%M:%S - %d/%m/%Y') - $DIFF           "                >> /export/home/informix/logs/update_statistic/ods_fazenda.log
echo  " "                                                                     >> /export/home/informix/logs/update_statistic/ods_fazenda.log

rm /export/home/informix/logs/update_statistic/calculo_ods_fazenda.log;
Crie um script semelhante para cada um dos bancos;

Quantos segundos rodou o update statistic (geral de todos os bancos) - rodar_dostats2.log
UPDATE STATISTIC - 14/10/2013 - 18:00:01 - 18:05:11 - 14/10/2013 - 310  
UPDATE STATISTIC - 15/10/2013 - 18:00:01 - 20:38:56 - 15/10/2013 - 9535  
UPDATE STATISTIC - 17/10/2013 - 18:00:01 - 18:31:10 - 17/10/2013 - 1869  
UPDATE STATISTIC - 20/10/2013 - 18:00:01 - 20:43:34 - 20/10/2013 - 9813  
UPDATE STATISTIC - 21/10/2013 - 18:00:01 - 18:10:19 - 21/10/2013 - 618  
UPDATE STATISTIC - 22/10/2013 - 18:00:02 - 20:34:13 - 22/10/2013 - 9251  
UPDATE STATISTIC - 23/10/2013 - 18:00:01 - 18:05:54 - 23/10/2013 - 353  
UPDATE STATISTIC - 24/10/2013 - 18:00:01 - 18:09:16 - 24/10/2013 - 555  
UPDATE STATISTIC - 25/10/2013 - 21:15:01 - 10:13:06 - 26/10/2013 - 46685  
UPDATE STATISTIC - 27/10/2013 - 18:00:01 - 20:20:14 - 27/10/2013 - 8413  
UPDATE STATISTIC - 28/10/2013 - 18:00:01 - 18:09:13 - 28/10/2013 - 552  
UPDATE STATISTIC - 29/10/2013 - 18:00:01 - 20:21:25 - 29/10/2013 - 8484  
UPDATE STATISTIC - 30/10/2013 - 18:00:01 - 18:02:26 - 30/10/2013 - 145  
UPDATE STATISTIC - 31/10/2013 - 18:00:01 - 18:04:34 - 31/10/2013 - 273  
UPDATE STATISTIC - 03/11/2013 - 18:00:01 - 20:06:41 - 03/11/2013 - 7600  
UPDATE STATISTIC - 04/11/2013 - 18:00:01 - 18:02:18 - 04/11/2013 - 137  
UPDATE STATISTIC - 05/11/2013 - 18:00:01 - 20:20:40 - 05/11/2013 - 8439  
UPDATE STATISTIC - 06/11/2013 - 18:00:01 - 18:03:13 - 06/11/2013 - 192  
UPDATE STATISTIC - 07/11/2013 - 18:00:01 - 18:04:30 - 07/11/2013 - 269  
UPDATE STATISTIC - 10/11/2013 - 18:00:01 - 19:59:56 - 10/11/2013 - 7195  
UPDATE STATISTIC - 11/11/2013 - 18:00:01 - 18:13:54 - 11/11/2013 - 833  
UPDATE STATISTIC - 12/11/2013 - 18:00:01 - 20:17:00 - 12/11/2013 - 8219  
UPDATE STATISTIC - 13/11/2013 - 18:00:01 - 18:50:22 - 13/11/2013 - 3021  
UPDATE STATISTIC - 14/11/2013 - 18:00:01 - 18:03:16 - 14/11/2013 - 194  
UPDATE STATISTIC - 17/11/2013 - 18:00:01 - 20:06:03 - 17/11/2013 - 7562  
UPDATE STATISTIC - 18/11/2013 - 18:00:01 - 18:21:43 - 18/11/2013 - 1302 
Quantos segundos rodou o update statistic de um banco (ods_fazenda)
ODS_FAZENDA      - 15/10/2013 - 18:00:01 - 20:36:36 - 15/10/2013 - 9395            
ODS_FAZENDA      - 17/10/2013 - 18:00:01 - 18:29:42 - 17/10/2013 - 1781            
ODS_FAZENDA      - 20/10/2013 - 18:00:01 - 20:41:44 - 20/10/2013 - 9703            
ODS_FAZENDA      - 21/10/2013 - 18:00:01 - 18:08:38 - 21/10/2013 - 517            
ODS_FAZENDA      - 22/10/2013 - 18:00:02 - 20:32:43 - 22/10/2013 - 9161            
ODS_FAZENDA      - 23/10/2013 - 18:00:01 - 18:04:18 - 23/10/2013 - 257            
ODS_FAZENDA      - 24/10/2013 - 18:00:01 - 18:07:57 - 24/10/2013 - 476            
ODS_FAZENDA      - 27/10/2013 - 18:00:01 - 20:18:42 - 27/10/2013 - 8321            
ODS_FAZENDA      - 28/10/2013 - 18:00:01 - 18:08:05 - 28/10/2013 - 484            
ODS_FAZENDA      - 29/10/2013 - 18:00:01 - 20:19:56 - 29/10/2013 - 8395            
ODS_FAZENDA      - 30/10/2013 - 18:00:01 - 18:00:33 - 30/10/2013 - 32            
ODS_FAZENDA      - 31/10/2013 - 18:00:01 - 18:02:34 - 31/10/2013 - 153            
ODS_FAZENDA      - 03/11/2013 - 18:00:01 - 20:05:06 - 03/11/2013 - 7505            
ODS_FAZENDA      - 04/11/2013 - 18:00:01 - 18:00:41 - 04/11/2013 - 40            
ODS_FAZENDA      - 05/11/2013 - 18:00:01 - 20:18:58 - 05/11/2013 - 8337            
ODS_FAZENDA      - 06/11/2013 - 18:00:01 - 18:01:51 - 06/11/2013 - 110            
ODS_FAZENDA      - 07/11/2013 - 18:00:01 - 18:02:35 - 07/11/2013 - 154            
ODS_FAZENDA      - 10/11/2013 - 18:00:01 - 19:58:14 - 10/11/2013 - 7093            
ODS_FAZENDA      - 11/11/2013 - 18:00:01 - 18:11:27 - 11/11/2013 - 686            
ODS_FAZENDA      - 12/11/2013 - 18:00:01 - 20:15:07 - 12/11/2013 - 8106            
ODS_FAZENDA      - 13/11/2013 - 18:00:01 - 18:48:04 - 13/11/2013 - 2883            
ODS_FAZENDA      - 14/11/2013 - 18:00:01 - 18:01:09 - 14/11/2013 - 68            
ODS_FAZENDA      - 17/11/2013 - 18:00:01 - 20:04:31 - 17/11/2013 - 7470            
ODS_FAZENDA      - 18/11/2013 - 18:00:01 - 18:20:06 - 18/11/2013 - 1205
Com os dados do tempo de execução do update statistic de cada banco fiz duas boas alterações;

(*) No inicio do monitoramento reparei que dos 4 bancos que estavam rodando diariamente no update statistic um banco em especial estava demorado em muito (levando de 8 a 10 horas para rodar) tinha dias que as 9 ou 10 horas da manhã ainda estava rodando o update statistic, consumindo todos os recursos do servidor deixando as aplicações de todos os usuários lenta, foi passado para o analista escolher - continuar rodando o update statitic desse banco diariamente ou tirar e colocar para rodar só no sábado, o analista decidiu deixar para rodar no sábado - depois dessa mudança melhorou em muito a performance do servidor do banco de dados Informix;

(*) Como notaram rodo o update statistic com o dostats (o utils2) ele tem um recurso interessante onde posso dar drop nas estatísticas (--drop-distributions) e recria as estatisticas - depois de um tempo comecei a observar que um outro banco estava crescendo muito e demorando o termino do update statistic e estava atrapalhando um outro processamento do usuário (este processamento terminava em 40rodando) usando essas estatisticas do tempo que levava para rodar o procedimento do update statistic retirei o (--drop-distributions) do segundo maior banco (dia sim dia não ele roda) o procedimento de 40 dias que levava para rodar foi para 15 dias este processamento esta mudança, fiquei observando se alguem iria reclamar de lentidão por causa das estatisticas desatualizadas desse banco e ninguem reclamou, como repararam este script simples para mostrar o tempo que roda o update statistic ajudou bastante.

0 comentários:

Enviar um comentário