Vou responder em ordem inversa : primeiro, vc compara é a proporção de LIOs x linhas efetivamente retornadas - por exemplo, digamos que vc vá fazer um acesso via índice direto, vc vai fazer um I/O do bloco de header do índice, depois ao menos um I/O de bloco branch (tipicamente na verdade em produção ao menos 2 blocos branch, em produção com tabs grandes é comum vc ter índices "altos") ,depois outro I/O do bloco leaf, que aí sim aponta pro bloco desejado com o registro na tabela, bloco esse que será lido também - assim, ao menos 5 I/Os pra se obter uma linha via índice é um mínimo comum. Assim, no seu exemplo, se esses 1000 LIOs trouxeram (digamos) , cento e tantas linhas, perfeito, fez uma média próxima disso de I/O por linha, é uma boa indicação de eficiência. Agora, imagine que esses mesmos 1000 LIOs trouxeram apenas meia dúzia de linhas, isso está muito muito longe do ideal, algo está TERRIVELMENTE errado aí, talvez um HWM alto, talvez um plano ineficiente, algo não tá bem.. =====>>>>>> EVIDENTE, esse tipo de análise não é aplicável sempre, por exemplo se vc tem algum tipo de agrupação, como um COUNT, óbvio que agrupação significa ler largas porções da tabela fazendo trocentos I/Os pra te trazer só uma linha que é o resultado da contagem, óbvio que a relação entre LIOs x resultado estará NATURALMENTE distorcida aqui..... Casos deste tipo aí sim, é mesmo empírico, é vc testar vários planos, re-escrever o SQL (com analytics, com o que puder) e ir comparando pra ver qual faz menos LIOs.... Quanto ao nested loops, ele NÃO é sempre bom, e nem (pra citar o caso típico) o full table scan é sempre ruim, tudo SEMPRE SEMPRE depende do caso, depende doseu objetivo.... Sabendo-se a teoria por trás do método (que no caso de nested loop basicamente é : escolhe-se uma tabela drive que será lida até o fim, pra cada linha lida busca- se os detalhes na outra tab do join), fica claro que isso é ultra- eficiente quando a tabela drive é ** pequena **, ou no caso em que a tab drive é grande MAS vc quer obter as primeiras linhas mais rapidamente (por exemplo, aquelas queries de paginação, onde vc mostra os primeiros 10 regs, depois que o usuário aperta 1 botão mostra mais 10). Claro que se o seu objetivo é processar tudo o mais rapidamente E a tabela não é de tamanho trivial, é via de regra *** muito mais *** eficiente vc processar múltiplas linhas por vez, ao invés de uma por uma que é o que o NL faz... No "Effective Oracle by Design" o Tom Kyte discute isso com exemplinhos muito bons, eu *** RECOMENDO ENFATICAMENTE *** que vc o adquira e o use, pra Ontem.... []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Thiago Lazzarotto <[EMAIL PROTECTED]> escreveu > > Bom dia Lista! > > Como sempre Chiappa, boas explicações. > É verdade que em meu sistema tenho muitas querys com nested loop. Muitas > mesmo. > Mas isso não é bom? Ou nem sempre é bom? > > Como o meu número de logical reads é muito maior que o physical reads, > vou começar a investigar > pelos consumidores de logical reads. > > Existe algum valor aceitável para logical reads por query? Por exemplo, > como vou saber se 1000 logical reads é muito ou pouco? > Só testando? > > Valeu amigos. > Thiago. > > > jlchiappa escreveu: > > > --- Em oracle_br@yahoogrupos.com.br > > <mailto:oracle_br%40yahoogrupos.com.br>, Thiago Lazzarotto > > <thiago.lazzarotto@> escreveu > > > > > > Pelo SO tem como ver qual o processo que está fazendo mais > > > I/O? > > > Ou somente pelo banco? > > > > Até tem, mas como disse a análise pelo SO normalmente tem dois > > problemas : o SO não te mostra o histórico , só te mostra os top > > processos , E só se estiverem fazendo o I/O exatamente na hora que vc > > está analisando... Até existem ferramentas à parte do SO normalmente > > que permitem vc acompanhar o histórico de I/O dum processo, que dizem > > pra cada processo quantos % de I/O consumiu (tipo, existiam x > > processos na máquina, foram feitos n I/Os no sistema no total, assim > > se um dado processo fez y I/Os isso representa tantos % do I/O > > servido)mas normalmente isso não é parte integrante do SO... > > Então, se omo a maioria dos sistemas o seu basicamente processe o que > > veio do banco, I/O do banco está sempre envolvido, recomendaria > > começar olhando no banco, mesmo. > > > > > > > > > > > O que notei analisando os statspack é que o número de waits não > > aumentou > > > > muito, mas o tempo de wait, esse sim aumentou bastante nas últimas > > > > semanas... > > > > Ou seja, teve sim processos/programas/alguma coisa nova que entrou > > (senão nada mudaria), e na média o tempo que os I/Os levam pra ser > > completados aumentou... Tranquilamente pode ser que o(s) > > programa(s)/processos mal-comportados estejam (por exemplo) fazendo > > nested loop, aí ele só faz I/Os curtos (PORTANTO não aperecriam em > > TOPs e coisas do tipo), mas são I/Os constantes, cabou um I/O pequeno > > imediatamente ele pede outro e logo em seguida outro e logo em > > seguida outro, ou seja, não tem um think time pra dar chance pro banco > > servir outro processo.... Um cara desse vc só pega NO HISTÓRICO, > > anaálise com vmstat/top/glance/similares é um instantãneo, não serviria. > > É como eu disse, análise de processo como um todo E analisar os > > principais processos.... Acho que seria MUITO muito interessante aí > > tentar se confirmar a performance do sub-sistema de disco per se, tipo > > : com o banco e aplicação parados vc faz uma medida, sobe o banco e > > ainda sem usuários faz outra, aí cfrme os usuários vão entrando vc vai > > fazendo novas medidas, E finalmente quando em modo normal de processo > > faz mais uma... http://www.acnc.com/benchmarks.html > > <http://www.acnc.com/benchmarks.html> tem algumas tools > > free pra isso, das que ele cita quando eu precisei uma vez eu usei o > > iozone. Mas isso é informação complementar, pra mim o pono aí AINDA é > > processo fazendo LIOs feito doido. > > E só complementando : não só eu como o resto do pessoal que tá > > conversando com vc, estamos todos focando em I/O - de repente > > tranquilamente PODE ser que hajam outras questões aí... Eu sugiro que > > vc passe o teu trace 10046 dos principais processos também pela > > ferramenta ORASRP, ele monta um relatóriozinho mais detalhado do que o > > tkprof, de repente outras coisas podem aparecer. Tem uma versão nova > > dela em http://oracledba.ru/orasrp/ <http://oracledba.ru/orasrp/> > > > > []s > > > > Chiappa > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] >