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