Vous êtes sur la page 1sur 4

Postou 21 agosto 2007 - 12:22 Mson, CBO - [ Cost Based Optimazer ] um padro que o otimizador do Oracle (SQL Engine)

) utiliza para realizar os planos de execues para cada instruo SQL no banco de dados, existe a opo RBO [ Rule Based Optimazer ], onde no precisa de estatsticas em tabelas e ndices, ao contrrio de CBO. Que pode ser alterado no parmetro optimizer_mode. Tabelas e ndices trabalham muito bem com CBO, no 10G, somente CBO *somente com outros parmetros de compatibilidade d para trabalhar com RBO* , existem muitos outros parmetros na instncia que tu pode configurar o optimizador e melhorar em N% a performace de suas consultas. Mas lembre-se, para trabalhar no modo CBO, as tabelas e ndices sempre devero ter estatsticas (na DBA_TABLES|DBA_INDEXES a columa LAST_ANALYZED) com valores atuais, isso trar bons planos de execues.
Ol, Entao CBO uma escolha... correto? (Oracle 10g) Como/onde eu defino se o oracle vai usar CBO ou no? ==> O que so index parallel e non-parallel? Pra que serve essa propriedade? ============================= Eu fui no sqlplus e executei: sql> dbms_stats.gather_schema_stats(ownname=>'meuschema',estimate_percent=>10,granul arity=>'auto',cascade=>true); ... demorou uns 3min para terminar de processar. Nesse momento... eu entendo que apenas habilitei o oracle para coletar estatistica... isso? Bem... eu supus que fosse isso... e ai eu rodei minha aplicao. Qdo rodo a minha aplicao... (estou pedindo um relatorio)... esse relatorio demora uns 30min. Isso mesmo... Entao... imaginei que a primeira vez apos o comando "gather"... ele vai coletar info de estatistica. Entao... na 2a.vez qdo eu rodar o meu relatorio... esse tempo de 30min nao deveria diminuir? Onde eu estou errando?

Vamos l, Entao CBO uma escolha... correto? (Oracle 10g) R: Se sua instncia estiver com o parmetro optmizer_mode = CHOOSE ou com ALL_ROWS, FIST_ROWS ou N_ROWS as consultas sero por CBO. Como/onde eu defino se o oracle vai usar CBO ou no? R: Nos parmetros da instncia como dito acima e coletando estatsticas de tabelas e ndices. O que so index parallel e non-parallel? Pra que serve essa propriedade? R: Parallel um recurso de paralelismo do Oracle (somente em verso EE - Enterprise Edition) quando se tem no servidor mais que 1 processador,

ele pode paralisar instrues DML e DDL, no confunda com OPS - Oracle Parallel Server, onde se trabalha com bancos de dados em paralelo para maximizar performance. O Index parallel uma opo que o Oracle fornece dizendo que a consulta desse ndice ser paralisada, ou seja, ir utilizar 2 ou mais threads para realizar um rpido acesso aos dados e NON-PARALLE diz que no ser utilizado paralelismo. Eu fui no sqlplus e executei: sql> dbms_stats.gather_schema_stats(ownname=>'meuschema',estimate_percent=>10,g ranularity=>'auto',cascade=>true); R: Isso coleta apenas informaes sobre o owner, automaticamente, meio que sem querer, seria uma forma de forar a utilizao do CBO no banco de dados sobre esse usurio. Para ter melhores resultados, faa essa coleta:
SQL> exec dbms_stats.gather_schema_stats (ownname=>'USUARIO',estimate_percent=>null,cascade=>true);

Esse comando lhe diz que ser coletado estatsticas completas do seu owner, ou seja, ser coletadas estatsticas para as tabelas e ndices (cascade=>true) por completo (estimate_percent=>null). ... demorou uns 3min para terminar de processar. R: Isso mesmo, dependendo dos tamanhos dos segmentos do seu owner, quantidade de registros, nvel de processamento da mquina, isso pode demorar mesmo, em alguns casos, dias!!!! Nesse momento... eu entendo que apenas habilitei o oracle para coletar estatistica... isso? R: O Oracle no ir coletar as estatsticas automaticamente, tu ter que criar procedimentos para isso quando for necessrio. Ele apenas coleto as informaes pq tu pediu. Bem... eu supus que fosse isso... e ai eu rodei minha aplicao. Qdo rodo a minha aplicao... (estou pedindo um relatorio)... esse relatorio demora uns 30min. Isso mesmo... Entao... imaginei que a primeira vez apos o comando "gather"... ele vai coletar info de estatistica. Entao... na 2a.vez qdo eu rodar o meu relatorio... esse tempo de 30min nao deveria diminuir? R: Sim se as estatsticas que pediu ao Oracle est correto, sempre bom passar por completo e nos ndices, agora, temos que ver se o relatrio est bem feito, bom fazer um trace sobre ele. Onde eu estou errando? R: Recomendo ler um pouco sobre otimizador de banco de dados para entender melhor como funciona todo o "engine" do Oracle e seus

comportamentos. No site da Oracle existem excelentes documentos sobre o assunto. Ola Rodrigo, MUITO OBRIGADO pela sua enorme ateno! Revisando: 1) Qdo eu dou o comando:
select value from v$parameter where name='optimizer_mode'

==> eu entendo que esse parametro serve para TODAS as sessoes... correto? mas... qdo eu dou o comando:
alter session set optimizer_mode='rule'

==> eu entendo que a alteracao APENAS para a sesso corrente... correto? ou seria para TODAS as sessoes futuras? ============================================== Para uma inicializao bsica... de ajuste de CBO... qual seria a sua recomendao para os parametros abaixo:

optimizer_index_cost_adj optimizer_search_limit optimizer_max_permutations

E qual o comando para deixar configurado sempre que o oracle iniciar? Seria o "alter session" ou altera DIRETO no spfile/pfile? Vamos l: 1) Qdo eu dou o comando: select value from v$parameter where name='optimizer_mode' ==> eu entendo que esse parametro serve para TODAS as sessoes... correto? R: SIM! Pois esse parmetro est configurado para a instncia Oracle. mas... qdo eu dou o comando: alter session set optimizer_mode='rule' ==> eu entendo que a alteracao APENAS para a sesso corrente... correto? R: SIM! ALTER SESSION SET somente para a sesso que est logada. ou seria para TODAS as sessoes futuras? R: NO! Somente para a sesso atual. As futuras vo sempre utilizar a que est configurado na instncia, que o primeiro caso. Para uma inicializao bsica... de ajuste de CBO... qual seria a sua recomendao para os parametros abaixo:

optimizer_index_cost_adj

optimizer_search_limit optimizer_max_permutations

R: Utilize sempre os valores padres, assim que estiver conhecendo a funcionalidade desses parmetros e conhecer bem seu ambiente Oracle, a, poder alterar e configurar de acordo com a aplicao. E qual o comando para deixar configurado sempre que o oracle iniciar? Seria o "alter session" ou altera DIRETO no spfile/pfile? R: O ALTER SESSION sempre na sesso e vlido somente para a sesso, para o banco de dados Oracle sempre utilizar um determinado valor necessrio colocar o valor no arquivo de parametrizao (PFILE) ou no server parameter file (SPFILE). Porm, lembre-se sempre de verificar se o parmetro que est alterando dinmico ou esttico, pois, em alguns parmetros necessrio realizar um STOP/START do banco de dados.
http://forum.imasters.com.br/topic/243674-10g-cbo-e-index/

Vous aimerez peut-être aussi