Certo, Entendido! 
 
Parabéns pela dedicação em responder a lista com tanta dedicação!


To: [EMAIL PROTECTED]: [EMAIL PROTECTED]: Sat, 15 Sep 2007 01:21:22 
+0000Subject: [oracle_br] Re: Estatisticas / Histogramas / Outlines




Éverton, primeiro sobre o uso de ANALYZE TABLE nn STATISTICS versusexecução da 
DBMS_STATS, isso é muito simples, via de regra deve serSEMPRE preferido o 
DBMS_STATS porque ele normalmente é maisperformático (pois pode ser 
paralelizado,entre outras coisas) ele é ocomando mais recente (pelo menos até a 
9i não há que eu saiba, mas aqquer momento em tese podem haver estatísticas não 
coletadas pelocacareco do ANALYZE), é por essas & outras que nos manuais 
maisrecentes (9i em diante) a Oracle já recomenda a DBMS_STATS, 
podeconferir....Agora, avançando um pouco, a opção "FOR ALL COLUMNS SIZE 1" 
nadbms_stats gera histogramas (mínimos no caso mas gera), então deduzoque vc 
quer obter uma recomendação sobre se é conveniente ou não secoletar 
histogramas, e se mínimos ou não, com que tamanho deamostra.... A resposta só 
pode ser DEPENDE, como sempre : o fato é que** SE ** após a análise dos seus 
dados (que apenas ** VOCÊ ** podefazer, não é a gente daqui!) vc descobriu que 
nas maiores e maisimportantes tabelas as principais colunas mais usadas nos 
seus SQLstem distribuição de dados altamente irregular (veja, NÂO é 
umadiferença mínima, é alguma coisa estatisticamente significativa, tipopra uma 
ocorrência de valor na coluna há digamos 5 registros, praoutra ocorrência há 5 
mil, coisa grande), ** ENTÃO ** sim, vale a penavc coletar histogramas. Quanto 
ao tamanho, isso depende dadistribuição em cada tabela, o ideal e 
recomendado(mais uma vez...) évc TER CONHECIMENTO dos seus dados pra saber 
quantos valores distintoshá nas colunas irregulares , sabendo isso se possível 
o ótimo seria vcusar essa quantidade como SIZE, mas além do limite máximo de 
255 noSIZE do banco Oracle, essa coleta é computacionalmente ** CARÍSSIMA**, 
queima uma CPU lascada e faz I/O pracas, então muitas vezes vc temque aplicar 
um ponto de compromisso, testando tempo/esforço de coletaversus melhoria obtida 
nos planos com SIZE de 10, 30, 60, até achar umponto de equilíbrio razoável. 
Outra opção pra determinar SIZE é usar a opção de AUTO doGATHER_TABLE_STATS, 
com ela (usando um algoritmo próprio interno) obanco faz uns chutes educados e 
tenta após breve análise "adivinhar"um SIZE razoável, a opção é testar primeiro 
coletando todos oshistogramas que julgar necessário com SIZE AUTO, e apenas 
pros SQLsque não ficarem OK aí fazer o teste especificando SIZE 
manualmente....Quanto aos OUTLINES : eles nada mais são do que um montão de 
HINTs , esabemos sim que via HINTs vc pode sim influenciar um SQL pra obter 
omesmo plano, então ** SIMULAR ** vc pode (e não só com eles, mastambém via 
outros métodos, tal como "importando" as estatísticas deProdução em 
desenvolvimento), mas quase certamente essa "simulação",com aspas TOTAIS, vai 
ser MÁ e PORCA, a ** única ** maneira 100%garantida de vc testar a performance 
é ter um hardware IGUAL àprodução, rodando o MESMO SO, com carga (simulada que 
seja) o maisidêntica possível à produção, PONTO. A máquina de contingência 
daprodução seria uma boa pra isso...MAS SE por roça total vc tiver que ir fazer 
a tal "simulação", aomenos saiba que obter o mesmo plano em produção e em 
desenvolvimentoNÂO É garantia de obter a mesma performance, pois mesmo se vc 
obtiveracesso pelo mesmo índice X nas duas máquinas, ** EVIDENTEMENTE ** 
sehardware de disco é diferente, o TEMPO DESSE ACESSO pode (e 
muitoprovavelmente VAI) ser diferente... Uma vez lido, o dado TEM QUE 
serenviado pro cliente, e isso é feito PELA REDE, obviamente que se ohardware 
de rede for diferente, ** ou ** se a banda de rede estivercom consumo diferente 
nas duas máquinas, óbvio que o tempo pra issoVAI SER DIFERENTE!! ==> E o pior 
de tudo, o que normalmente INVALIDA "simulações" dessetipo : mesmo que vc 
obtenha planos IDÊNTICOS, um plano de execução écomposto por uma série de 
passos, SE na produção há muitos usuáriossimultâneos fazendo I/Os ao mesmo 
tempo, em produção logicamente obanco Oracle vai ter que enfileirar os 
"pedidos" e dar um pouco de"atenção" pra cada um, assim tranquilamente vc PODE 
ter a mesmavelocidade de I/O nas duas máquinas, o mesmo plano, MAS em 
produçãopelo fato de muitos outros usuários estarem sendo atendidos, entrecada 
passo haveria um WAIT palpável, uma vez atendido o seu passo doplano, a sessão 
teria que esperar os OUTROS serem atendidos também,pra só depois voltar à vez 
dela....[]sChiappa--- Em oracle_br@yahoogrupos.com.br, Everton Dias <[EMAIL 
PROTECTED]>escreveu>> > > Pessoal, qual a forma que vocês normalmente coletam 
estatisticas nobanco? > > Quero dizer, qual seria a melhor forma:> > - ANALYZE 
table owner.tabela COMPUTE statistics FOR table for allindexes;> ou> - execute 
DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 'owner', TABNAME=> 'TABLE_NAME', 
CASCADE => TRUE, method_opt => 'FOR ALL COLUMNS SIZE 1');> > Ou até mesmo 
alguma outra forma ou combinação dos métodos? > > Uma segunda pergunta, Alguém 
já usou os tais outlines? Com outlineseu poderia usar em um banco de 
desenvolvimento as mesmas estatisticascoletadas em produção, a fim de simular a 
performance?> > Qualquer sugestão é bem vinda.> > 
__________________________________________________________> Encontre o que 
procura com mais eficiência! Instale já a Barra deFerramentas com Windows 
Desktop Search GRÁTIS!> http://desktop.msn.com.br/> > [As partes desta mensagem 
que não continham texto foram removidas]> 






_________________________________________________________________
Encontre o que procura com mais eficiência! Instale já a Barra de Ferramentas 
com Windows Desktop Search GRÁTIS!
http://desktop.msn.com.br/

[As partes desta mensagem que não continham texto foram removidas]

Responder a