{"id":1812,"date":"2018-10-21T21:51:27","date_gmt":"2018-10-21T23:51:27","guid":{"rendered":"http:\/\/dbtimewizard.com.br\/blog\/?p=1812"},"modified":"2019-11-11T18:36:26","modified_gmt":"2019-11-11T21:36:26","slug":"como-uma-consulta-pode-ter-alto-desempenho-sem-dados-estatisticos","status":"publish","type":"post","link":"http:\/\/dbtimewizard.com.br\/blog\/como-uma-consulta-pode-ter-alto-desempenho-sem-dados-estatisticos\/","title":{"rendered":"Como uma consulta pode ter alto desempenho sem dados estat\u00edsticos?"},"content":{"rendered":"<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">O Otimizador do Oracle cria planos de execu\u00e7\u00e3o com alta performance baseado nas estat\u00edsticas dos objetos no banco de dados, com estas informa\u00e7\u00f5es ele consegue fazer estimativas de acesso para cada uma das opera\u00e7\u00f5es no plano de execu\u00e7\u00e3o e a qualidade destas estimativas \u00e9 que determina o desempenho das instru\u00e7\u00f5es SQL, mas o que acontece quando algum objeto envolvido na instru\u00e7\u00e3o SQL n\u00e3o possui estat\u00edsticas? Desde a vers\u00e3o 9i at\u00e9 a vers\u00e3o 11gR2, quando um dos objetos envolvidos na instru\u00e7\u00e3o SQL n\u00e3o possui estat\u00edsticas o Otimizador utiliza o recurso <a href=\"http:\/\/dbtimewizard.com.br\/blog\/plano-de-execucao-ruim-turbine-o-otimizador\/\" target=\"_blank\"><strong>DYNAMIC SAMPLING<\/strong><\/a> para coletar estat\u00edsticas a partir de uma pequena amostra de registros dos objetos durante a montagem do plano de execu\u00e7\u00e3o.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Este recurso \u00e9 muito \u00fatil, porem ele n\u00e3o resolve problemas relativos a defici\u00eancias na coleta de estat\u00edsticas como estat\u00edsticas desatualizadas e falta de histogramas. Na vers\u00e3o 12c a Oracle implementou uma melhoria no recurso DYNAMIC SAMPLING e agora o Otimizador tamb\u00e9m consegue contornar problemas de estat\u00edsticas desatualizadas e falta de histogramas, neste artigo vamos fazer 2 simula\u00e7\u00f5es para demonstrar a evolu\u00e7\u00e3o do recurso DYNAMIC SAMPLING, a primeira numa base 11gR2 e a segunda numa base 12cR2.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Na primeira simula\u00e7\u00e3o vamos verificar a inefici\u00eancia do recurso DYNAMIC SAMPLING na vers\u00e3o 11gR2 quando as estat\u00edsticas est\u00e3o desatualizadas ou sem histogramas:<\/span><\/p>\n<p><strong><span style=\"font-size: 12pt;\">1.1) Criar uma tabela com um \u00edndice <\/span><\/strong><br \/>\n<strong><span style=\"font-size: 12pt;\">1.2) Executar uma consulta na tabela criada sem as estat\u00edsticas<\/span><\/strong><br \/>\n<strong><span style=\"font-size: 12pt;\">1.3) Coletar as estat\u00edsticas e executar a consulta novamente<\/span><\/strong><br \/>\n<strong><span style=\"font-size: 12pt;\">1.4) Inserir registros na tabela para as estat<\/span><span style=\"font-size: 12pt;\">\u00edsticas ficarem desatualizadas<\/span><\/strong><br \/>\n<strong><span style=\"font-size: 12pt;\">1.5) Executar a consulta novamente<\/span><\/strong><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Na segunda simula\u00e7\u00e3o vamos verificar a melhoria no recurso DYNAMIC SAMPLING na vers\u00e3o 12cR2 quando as estat\u00edsticas est\u00e3o desatualizadas ou sem histogramas :<\/span><\/p>\n<p><strong><span style=\"font-size: 12pt;\">2.1) Criar uma tabela com um \u00edndice <\/span><\/strong><br \/>\n<strong><span style=\"font-size: 12pt;\">2.2) Executar uma consulta na tabela criada <\/span><\/strong><br \/>\n<strong><span style=\"font-size: 12pt;\">2.3) Coletar as estat\u00edsticas e executar a consulta novamente<\/span><\/strong><br \/>\n<strong><span style=\"font-size: 12pt;\">2.4) Inserir registros na tabela para as estat\u00edsticas ficarem desatualizadas<\/span><\/strong><br \/>\n<strong><span style=\"font-size: 12pt;\">2.5) Executar a consulta novamente<\/span><\/strong><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-size: 14pt;\">1.1) Criar uma tabela com um \u00edndice<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Vamos criar os objetos necess\u00e1rios para realizar a nossa simula\u00e7\u00e3o e inicialmente n\u00e3o vamos coletar as estat\u00edsticas.<\/span><\/p>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:100%;height:520px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"sy0\">*<\/span> FROM V<span class=\"re0\">$VERSION<\/span> where rownum <span class=\"sy0\">&lt;<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nBANNER<br \/>\n<span class=\"sy0\">--------------------------------------------------------------------------------<\/span><br \/>\nOracle Database 11g Enterprise Edition Release 11<span class=\"sy0\">.<\/span>2<span class=\"sy0\">.<\/span>0<span class=\"sy0\">.<\/span>4<span class=\"sy0\">.<\/span>0 <span class=\"sy0\">-<\/span> 64bit Production<br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> create table dbtw056 <span class=\"kw1\">as<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; select <span class=\"nu0\">20<\/span> &nbsp; &nbsp; &nbsp; <span class=\"kw1\">as<\/span> codigo<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"st_h\">'DBTimeWizard - Oracle Performance and Tuning'<\/span> <span class=\"kw1\">as<\/span> produto<br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; &nbsp; from dual connect by level<span class=\"sy0\">&lt;=<\/span><span class=\"nu0\">9981<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nTabela criada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> INSERT INTO dbtw056 select rownum<span class=\"sy0\">,<\/span> <span class=\"st_h\">'DBTimeWizard - Oracle Performance and Tuning'<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;from dual connect by level<span class=\"sy0\">&lt;=<\/span><span class=\"nu0\">19<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"nu0\">19<\/span> linhas criadas<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> COMMIT<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nCommit conclu\u00ed<span class=\"kw1\">do<\/span><span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> create index dbtw056_codigo_idx on dbtw056<span class=\"br0\">&#40;<\/span>codigo<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n\u00cdndice criado<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT table_name<span class=\"sy0\">,<\/span> stale_stats<span class=\"sy0\">,<\/span> last_analyzed<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM dba_tab_statistics<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE table_name<span class=\"sy0\">=<\/span><span class=\"st_h\">'DBTW056'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nTABLE_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; STA LAST_ANA<br \/>\n<span class=\"sy0\">------------------------------<\/span> <span class=\"sy0\">---<\/span> <span class=\"sy0\">--------<\/span><br \/>\nDBTW056<br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Observamos acima no comando SELECT na vis\u00e3o DBA_TAB_STATISTICS que as estat\u00edsticas n\u00e3o est\u00e3o dispon\u00edveis.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-size: 14pt;\">1.2) Executar uma consulta na tabela criada sem as estat\u00edsticas<\/span><\/h2>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:100%;height:520px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET optimizer_dynamic_sampling<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSess\u00e3o alterada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET statistics_level<span class=\"sy0\">=<\/span>ALL<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSess\u00e3o alterada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"coMULTI\">\/* dbtw-056.1 *\/<\/span> <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM dbtw056<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE codigo<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; CODIGO PRODUTO<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">--------------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">11<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Oracle Performance and Tuning<br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column sql_id new_value m_sql_id<br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column child_number new_value m_child_no<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT sql_id<span class=\"sy0\">,<\/span> child_number<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM v<span class=\"re0\">$sql<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE sql_text LIKE <span class=\"st_h\">'%dbtw-056.1%'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; AND sql_text NOT LIKE <span class=\"st_h\">'%v$sql%'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSQL_ID &nbsp; &nbsp; &nbsp; &nbsp;CHILD_NUMBER<br \/>\n<span class=\"sy0\">-------------<\/span> <span class=\"sy0\">------------<\/span><br \/>\n5ychjrxz1g28n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'ALLSTATS LAST'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nantigo &nbsp; <span class=\"nu0\">2<\/span><span class=\"sy0\">:<\/span> &nbsp; FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'ALLSTATS LAST'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\nnovo &nbsp; <span class=\"nu0\">2<\/span><span class=\"sy0\">:<\/span> &nbsp; FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'5ychjrxz1g28n'<\/span><span class=\"sy0\">,<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'ALLSTATS LAST'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nPLAN_TABLE_OUTPUT<br \/>\n<span class=\"sy0\">----------------------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<br \/>\nSQL_ID &nbsp;5ychjrxz1g28n<span class=\"sy0\">,<\/span> child number <span class=\"nu0\">0<\/span><br \/>\n<span class=\"sy0\">-------------------------------------<\/span><br \/>\nSELECT <span class=\"coMULTI\">\/* dbtw-056.1 *\/<\/span> <span class=\"sy0\">*<\/span> &nbsp; FROM dbtw056 &nbsp;WHERE codigo<span class=\"sy0\">=:<\/span><span class=\"st0\">&quot;SYS_B_0&quot;<\/span><br \/>\n<br \/>\nPlan <a href=\"http:\/\/www.php.net\/hash\"><span class=\"kw3\">hash<\/span><\/a> value<span class=\"sy0\">:<\/span> <span class=\"nu0\">1209234527<\/span><br \/>\n<br \/>\n<span class=\"sy0\">------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> Id &nbsp;<span class=\"sy0\">|<\/span> Operation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Starts <span class=\"sy0\">|<\/span> E<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> A<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> &nbsp; A<span class=\"sy0\">-<\/span><a href=\"http:\/\/www.php.net\/time\"><span class=\"kw3\">Time<\/span><\/a> &nbsp; <span class=\"sy0\">|<\/span> Buffers <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">0<\/span> <span class=\"sy0\">|<\/span> SELECT STATEMENT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">4<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;TABLE ACCESS BY INDEX ROWID<span class=\"sy0\">|<\/span> DBTW056 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; <span class=\"nu0\">67<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">4<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &nbsp; INDEX <a href=\"http:\/\/www.php.net\/range\"><span class=\"kw3\">RANGE<\/span><\/a> SCAN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> DBTW056_CODIGO_IDX <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; <span class=\"nu0\">67<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<br \/>\nPredicate Information <span class=\"br0\">&#40;<\/span>identified by operation id<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------<\/span><br \/>\n<br \/>\n&nbsp; &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CODIGO&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_0<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nNote<br \/>\n<span class=\"sy0\">-----<\/span><br \/>\n&nbsp; &nbsp;<span class=\"sy0\">-<\/span> dynamic sampling used <span class=\"kw1\">for<\/span> this statement <span class=\"br0\">&#40;<\/span>level<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">23<\/span> linhas selecionadas<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Observe no plano de execu\u00e7\u00e3o que o Otimizador estimou que seriam selecionadas 67 linhas na tabela, esta estimativa aproximada foi realizada pelo recurso DYNAMIC SAMPLING pois n\u00e3o havia estat\u00edsticas no dicionario de dados e como a quantidade de linhas estimadas e pequena comparada com a quantidade de linhas na tabela (10.000 linhas) o Otimizador decidiu utilizar o \u00edndice no plano de execu\u00e7\u00e3o.<\/span><\/p>\n<h2><span style=\"font-size: 14pt;\">1.3) Coletar as estat\u00edsticas e executar a consulta novamente<\/span><\/h2>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:100%;height:520px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> <a href=\"http:\/\/www.php.net\/exec\"><span class=\"kw3\">exec<\/span><\/a> dbms_stats<span class=\"sy0\">.<\/span>gather_table_stats<span class=\"br0\">&#40;<\/span>ownname<span class=\"sy0\">=&gt;<\/span> USER<span class=\"sy0\">,<\/span> tabname<span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'DBTW056'<\/span><span class=\"sy0\">,<\/span> cascade<span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">,<\/span> method_opt<span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'FOR ALL COLUMNS SIZE 1'<\/span><span class=\"sy0\">,<\/span>force<span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">,<\/span>degree<span class=\"sy0\">=&gt;<\/span> <span class=\"nu0\">16<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nProcedimento PL<span class=\"sy0\">\/<\/span>SQL conclu\u00ed<span class=\"kw1\">do<\/span> com sucesso<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT column_name <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;NAME&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_distinct <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;#DISTINCT&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp; &nbsp; density <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;DENSITY&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_nulls <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;#NULL&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; &nbsp; &nbsp; avg_col_len <span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">6<\/span> &nbsp; &nbsp; &nbsp; &nbsp; histogram<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">7<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_buckets <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;#BUCKETS&quot;<\/span><br \/>\n&nbsp; <span class=\"nu0\">8<\/span> &nbsp; &nbsp;FROM dba_tab_col_statistics<br \/>\n&nbsp; <span class=\"nu0\">9<\/span> &nbsp; WHERE table_name <span class=\"sy0\">=<\/span> <span class=\"st_h\">'DBTW056'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nNAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"co2\">#DISTINCT &nbsp; &nbsp;DENSITY &nbsp; &nbsp; &nbsp;#NULL AVG_COL_LEN HISTOGRAM &nbsp; &nbsp; &nbsp; &nbsp; #BUCKETS<br \/>\n<\/span><span class=\"sy0\">------------------------------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">-----------<\/span> <span class=\"sy0\">---------------<\/span> <span class=\"sy0\">----------<\/span><br \/>\nPRODUTO &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">1<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">45<\/span> NONE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">1<\/span><br \/>\nCODIGO &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">20<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">,<\/span><span class=\"nu8\">05<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">3<\/span> NONE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">1<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET optimizer_dynamic_sampling<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSess\u00e3o alterada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET statistics_level<span class=\"sy0\">=<\/span>ALL<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSess\u00e3o alterada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"coMULTI\">\/* dbtw-056.2 *\/<\/span> <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM dbtw056<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE codigo<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; CODIGO PRODUTO<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">--------------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">11<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Oracle Performance and Tuning<br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column sql_id new_value m_sql_id<br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column child_number new_value m_child_no<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT sql_id<span class=\"sy0\">,<\/span> child_number<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM v<span class=\"re0\">$sql<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE sql_text LIKE <span class=\"st_h\">'%dbtw-056.2%'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; AND sql_text NOT LIKE <span class=\"st_h\">'%v$sql%'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSQL_ID &nbsp; &nbsp; &nbsp; &nbsp;CHILD_NUMBER<br \/>\n<span class=\"sy0\">-------------<\/span> <span class=\"sy0\">------------<\/span><br \/>\ndjrqpaw9dqaxw &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'ALLSTATS LAST'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nPLAN_TABLE_OUTPUT<br \/>\n<span class=\"sy0\">-------------------------------------------------------------------------------------------------------------------------------------------------------------------<\/span><br \/>\nSQL_ID &nbsp;djrqpaw9dqaxw<span class=\"sy0\">,<\/span> child number <span class=\"nu0\">0<\/span><br \/>\n<span class=\"sy0\">-------------------------------------<\/span><br \/>\nSELECT <span class=\"coMULTI\">\/* dbtw-056.2 *\/<\/span> <span class=\"sy0\">*<\/span> &nbsp; FROM dbtw056 &nbsp;WHERE codigo<span class=\"sy0\">=:<\/span><span class=\"st0\">&quot;SYS_B_0&quot;<\/span><br \/>\n<br \/>\nPlan <a href=\"http:\/\/www.php.net\/hash\"><span class=\"kw3\">hash<\/span><\/a> value<span class=\"sy0\">:<\/span> <span class=\"nu0\">3528933912<\/span><br \/>\n<br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> Id &nbsp;<span class=\"sy0\">|<\/span> Operation &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Name &nbsp; &nbsp;<span class=\"sy0\">|<\/span> Starts <span class=\"sy0\">|<\/span> E<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> A<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> &nbsp; A<span class=\"sy0\">-<\/span><a href=\"http:\/\/www.php.net\/time\"><span class=\"kw3\">Time<\/span><\/a> &nbsp; <span class=\"sy0\">|<\/span> Buffers <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">0<\/span> <span class=\"sy0\">|<\/span> SELECT STATEMENT &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">84<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;TABLE ACCESS FULL<span class=\"sy0\">|<\/span> DBTW056 <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">500<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">84<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------<\/span><br \/>\n<br \/>\nPredicate Information <span class=\"br0\">&#40;<\/span>identified by operation id<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------<\/span><br \/>\n<br \/>\n&nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">-<\/span> filter<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CODIGO&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_0<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nNote<br \/>\n<span class=\"sy0\">-----<\/span><br \/>\n&nbsp; &nbsp;<span class=\"sy0\">-<\/span> dynamic sampling used <span class=\"kw1\">for<\/span> this statement <span class=\"br0\">&#40;<\/span>level<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">22<\/span> linhas selecionadas<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Ap\u00f3s a execu\u00e7\u00e3o da coleta das estat\u00edsticas podemos observar no SELECT na vis\u00e3o DBA_TAB_COL_STATISTICS que n\u00e3o existem histogramas nas duas colunas da tabela, observando o plano de execu\u00e7\u00e3o verificamos que o Otimizador estimou que seriam selecionadas 500 linhas na tabela e por esta raz\u00e3o decidiu fazer uma opera\u00e7\u00e3o TABLE ACCESS FULL. O Otimizador n\u00e3o utilizou o recurso DYNAMIC SAMPLING pois havia estat\u00edsticas da tabela e do \u00edndice no dicionario de dados do banco, mas como n\u00e3o havia HISTOGRAMAS o calculo utilizado para estimar o numero de linhas selecionadas foi: NUMERO DE LINHAS NA TABELA \/ NUMERO DE LINHAS DISTINTAS (10.000 \/ 20 = 500).<\/span><\/p>\n<h2><span style=\"font-size: 14pt;\">1.4) Inserir registros na tabela para as estat\u00edsticas ficarem desatualizadas<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Vamos inserir 2.000 linhas na tabela (10%) para for\u00e7ar uma situa\u00e7\u00e3o de estat\u00edsticas desatualizadas, na sequ\u00eancia vamos executar a consulta novamente e verificar se o recurso DYNAMIC SAMPLING vai ser utilizado.<\/span><\/p>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:100%;height:520px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> INSERT INTO dbtw056 select <span class=\"nu0\">15<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'DBTimeWizard - Oracle Performance and Tuning'<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;from dual connect by level<span class=\"sy0\">&lt;=<\/span> <span class=\"nu0\">2000<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"nu0\">2000<\/span> linhas criadas<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> COMMIT<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nCommit conclu\u00ed<span class=\"kw1\">do<\/span><span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> <a href=\"http:\/\/www.php.net\/exec\"><span class=\"kw3\">exec<\/span><\/a> dbms_stats<span class=\"sy0\">.<\/span>FLUSH_DATABASE_MONITORING_INFO<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nProcedimento PL<span class=\"sy0\">\/<\/span>SQL conclu\u00ed<span class=\"kw1\">do<\/span> com sucesso<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT table_name<span class=\"sy0\">,<\/span> stale_stats<span class=\"sy0\">,<\/span> last_analyzed<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM dba_tab_statistics<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE table_name<span class=\"sy0\">=<\/span><span class=\"st_h\">'DBTW056'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nTABLE_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; STA LAST_ANA<br \/>\n<span class=\"sy0\">------------------------------<\/span> <span class=\"sy0\">---<\/span> <span class=\"sy0\">--------<\/span><br \/>\nDBTW056 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;YES <span class=\"nu0\">15<\/span><span class=\"sy0\">\/<\/span><span class=\"nu0\">10<\/span><span class=\"sy0\">\/<\/span><span class=\"nu0\">18<\/span><br \/>\n<br \/>\n<span class=\"nu0\">1<\/span> linha selecionada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p><span style=\"font-size: 12pt;\">Observe no SELECT na vis\u00e3o DBA_TAB_STATISTICS que o campo STALE_STATS esta como YES, isto significa que as estat\u00edsticas est\u00e3o desatualizadas.<\/span><\/p>\n<h2><span style=\"font-size: 14pt;\">1.5) Executar a consulta novamente<\/span><\/h2>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:100%;height:520px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET optimizer_dynamic_sampling<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSess\u00e3o alterada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET statistics_level<span class=\"sy0\">=<\/span>ALL<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSess\u00e3o alterada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"coMULTI\">\/* dbtw-056.3 *\/<\/span> <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM dbtw056<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE codigo<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; CODIGO PRODUTO<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">--------------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">11<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Oracle Performance and Tuning<br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column sql_id new_value m_sql_id<br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column child_number new_value m_child_no<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT sql_id<span class=\"sy0\">,<\/span> child_number<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM v<span class=\"re0\">$sql<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE sql_text LIKE <span class=\"st_h\">'%dbtw-056.3%'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; AND sql_text NOT LIKE <span class=\"st_h\">'%v$sql%'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSQL_ID &nbsp; &nbsp; &nbsp; &nbsp;CHILD_NUMBER<br \/>\n<span class=\"sy0\">-------------<\/span> <span class=\"sy0\">------------<\/span><br \/>\ngvy2nbd3qys8k &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'ALLSTATS LAST'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nPLAN_TABLE_OUTPUT<br \/>\n<span class=\"sy0\">----------------------------------------------------------------------------------------------------------<\/span><br \/>\nSQL_ID &nbsp;gvy2nbd3qys8k<span class=\"sy0\">,<\/span> child number <span class=\"nu0\">0<\/span><br \/>\n<span class=\"sy0\">-------------------------------------<\/span><br \/>\nSELECT <span class=\"coMULTI\">\/* dbtw-056.3 *\/<\/span> <span class=\"sy0\">*<\/span> &nbsp; FROM dbtw056 &nbsp;WHERE codigo<span class=\"sy0\">=:<\/span><span class=\"st0\">&quot;SYS_B_0&quot;<\/span><br \/>\n<br \/>\nPlan <a href=\"http:\/\/www.php.net\/hash\"><span class=\"kw3\">hash<\/span><\/a> value<span class=\"sy0\">:<\/span> <span class=\"nu0\">3528933912<\/span><br \/>\n<br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> Id &nbsp;<span class=\"sy0\">|<\/span> Operation &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Name &nbsp; &nbsp;<span class=\"sy0\">|<\/span> Starts <span class=\"sy0\">|<\/span> E<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> A<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> &nbsp; A<span class=\"sy0\">-<\/span><a href=\"http:\/\/www.php.net\/time\"><span class=\"kw3\">Time<\/span><\/a> &nbsp; <span class=\"sy0\">|<\/span> Buffers <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">0<\/span> <span class=\"sy0\">|<\/span> SELECT STATEMENT &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">99<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;TABLE ACCESS FULL<span class=\"sy0\">|<\/span> DBTW056 <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">500<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">99<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------<\/span><br \/>\n<br \/>\nPredicate Information <span class=\"br0\">&#40;<\/span>identified by operation id<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------<\/span><br \/>\n<br \/>\n&nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">-<\/span> filter<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CODIGO&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_0<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nNote<br \/>\n<span class=\"sy0\">-----<\/span><br \/>\n&nbsp; &nbsp;<span class=\"sy0\">-<\/span> dynamic sampling used <span class=\"kw1\">for<\/span> this statement <span class=\"br0\">&#40;<\/span>level<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">22<\/span> linhas selecionadas<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Analisando o plano de execu\u00e7\u00e3o da consulta podemos constatar que o Otimizador decidiu acessar a tabela utilizando a opera\u00e7\u00e3o TABLE ACCESS FULL pois a quantidade de linhas estimadas foi 500 novamente, ou seja, quando as estat\u00edsticas est\u00e3o desatualizadas o Otimizador n\u00e3o utiliza o recurso DYNAMIC SAMPLING.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Agora vamos acessar uma base Oracle 12cR2 e repetir o mesmo processo para verificar como o Otimizador vai tratar uma tabela com estatisticas desatualizas e sem histogramas.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-size: 14pt;\">2.1) Criar uma tabela com um \u00edndice<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Vamos criar os objetos necess\u00e1rios para realizar a nossa simula\u00e7\u00e3o na base 12cR2 e inicialmente n\u00e3o vamos executar o comando de coleta de estat\u00edsticas.<\/span><\/p>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:100%;height:520px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> SELECT BANNER FROM V<span class=\"re0\">$VERSION<\/span> where rownum <span class=\"sy0\">&lt;<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nBANNER<br \/>\n<span class=\"sy0\">--------------------------------------------------------------------------------<\/span><br \/>\nOracle Database 12c Enterprise Edition Release 12<span class=\"sy0\">.<\/span>2<span class=\"sy0\">.<\/span>0<span class=\"sy0\">.<\/span>1<span class=\"sy0\">.<\/span>0 <span class=\"sy0\">-<\/span> 64bit Production<br \/>\n<br \/>\n<span class=\"nu0\">1<\/span> linha selecionada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> create table dbtw056 <span class=\"kw1\">as<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; select <span class=\"nu0\">20<\/span> &nbsp; &nbsp; &nbsp; <span class=\"kw1\">as<\/span> codigo<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"st_h\">'DBTimeWizard - Oracle Performance and Tuning'<\/span> <span class=\"kw1\">as<\/span> produto<br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; &nbsp; from dual connect by level<span class=\"sy0\">&lt;=<\/span><span class=\"nu0\">9981<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nTabela criada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> INSERT INTO dbtw056 select rownum<span class=\"sy0\">,<\/span> <span class=\"st_h\">'DBTimeWizard - Oracle Performance and Tuning'<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;from dual connect by level<span class=\"sy0\">&lt;=<\/span><span class=\"nu0\">19<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"nu0\">19<\/span> linhas criadas<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> COMMIT<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nCommit conclu\u00ed<span class=\"kw1\">do<\/span><span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> create index dbtw056_codigo_idx on dbtw056<span class=\"br0\">&#40;<\/span>codigo<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n\u00cdndice criado<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> COL table_name <span class=\"kw1\">FOR<\/span> A40<span class=\"sy0\">;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT table_name<span class=\"sy0\">,<\/span> stale_stats<span class=\"sy0\">,<\/span> last_analyzed<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM dba_tab_statistics<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE table_name<span class=\"sy0\">=<\/span><span class=\"st_h\">'DBTW056'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nTABLE_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; STA LAST_ANA<br \/>\n<span class=\"sy0\">----------------------------------------<\/span> <span class=\"sy0\">---<\/span> <span class=\"sy0\">--------<\/span><br \/>\nDBTW056 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NO &nbsp;<span class=\"nu0\">17<\/span><span class=\"sy0\">\/<\/span><span class=\"nu0\">10<\/span><span class=\"sy0\">\/<\/span><span class=\"nu0\">18<\/span><br \/>\n<br \/>\n<span class=\"nu0\">1<\/span> linha selecionada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT column_name <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;NAME&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_distinct <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;#DISTINCT&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp; &nbsp; density <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;DENSITY&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_nulls <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;#NULL&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; &nbsp; &nbsp; avg_col_len <span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">6<\/span> &nbsp; &nbsp; &nbsp; &nbsp; histogram<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">7<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_buckets <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;#BUCKETS&quot;<\/span><br \/>\n&nbsp; <span class=\"nu0\">8<\/span> &nbsp; &nbsp;FROM dba_tab_col_statistics<br \/>\n&nbsp; <span class=\"nu0\">9<\/span> &nbsp; WHERE table_name <span class=\"sy0\">=<\/span> <span class=\"st_h\">'DBTW056'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nNAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"co2\">#DISTINCT &nbsp; &nbsp; &nbsp;DENSITY &nbsp; &nbsp; &nbsp;#NULL AVG_COL_LEN HISTOGRAM &nbsp; &nbsp; &nbsp; &nbsp; #BUCKETS<br \/>\n<\/span><span class=\"sy0\">------------------------------<\/span> <span class=\"sy0\">----------------<\/span> <span class=\"sy0\">------------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">-----------<\/span> <span class=\"sy0\">---------------<\/span> <span class=\"sy0\">----------<\/span><br \/>\nCODIGO &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> &nbsp;<span class=\"nu19\">1.000000000<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">3<\/span> NONE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">1<\/span><br \/>\nPRODUTO &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">1<\/span> &nbsp;<span class=\"nu19\">1.000000000<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">45<\/span> NONE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">1<\/span><br \/>\n<br \/>\n<span class=\"nu0\">2<\/span> linhas selecionadas<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> COL index_name <span class=\"kw1\">FOR<\/span> A40<span class=\"sy0\">;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT index_name <span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; &nbsp; &nbsp; blevel <span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_rows <span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; &nbsp; &nbsp; distinct_keys <span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; &nbsp; &nbsp; clustering_factor <span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">6<\/span> &nbsp; &nbsp; &nbsp; &nbsp; status<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">7<\/span> &nbsp; &nbsp; &nbsp; &nbsp; leaf_blocks <span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">8<\/span> &nbsp; &nbsp; &nbsp; &nbsp; last_analyzed<br \/>\n&nbsp; <span class=\"nu0\">9<\/span> &nbsp; &nbsp;FROM dba_indexes<br \/>\n&nbsp;<span class=\"nu0\">10<\/span> &nbsp; WHERE table_name <span class=\"sy0\">=<\/span> <span class=\"st_h\">'DBTW056'<\/span><br \/>\n&nbsp;<span class=\"nu0\">11<\/span> &nbsp; ORDER by owner<span class=\"sy0\">,<\/span> index_name<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nINDEX_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BLEVEL &nbsp; NUM_ROWS DISTINCT_KEYS CLUSTERING_FACTOR STATUS &nbsp; &nbsp; LEAF_BLOCKS LAST_ANA<br \/>\n<span class=\"sy0\">----------------------------------------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">-------------<\/span> <span class=\"sy0\">-----------------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">-----------<\/span> <span class=\"sy0\">--------<\/span><br \/>\nDBTW056_CODIGO_IDX &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">10000<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">20<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">75<\/span> VALID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">20<\/span> <span class=\"nu0\">17<\/span><span class=\"sy0\">\/<\/span><span class=\"nu0\">10<\/span><span class=\"sy0\">\/<\/span><span class=\"nu0\">18<\/span><br \/>\n<br \/>\n<span class=\"nu0\">1<\/span> linha selecionada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Observamos acima no comando SELECT na vis\u00e3o DBA_TAB_STATISTICS que apesar de n\u00e3o executarmos o comando para coleta de estat\u00edsticas, elas foram coletadas automaticamente pelo Oracle, porem elas est\u00e3o imprecisas pois o campo CODIGO informa que existe somente 1 valor distinto quando na verdade s\u00e3o 20. As estatisticas do \u00edndice foram coletadas de forma precisa.<\/span><\/p>\n<h2><span style=\"font-size: 14pt;\">2.2) Executar uma consulta na tabela criada<\/span><\/h2>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:100%;height:520px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET optimizer_dynamic_sampling<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSess\u00e3o alterada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET statistics_level<span class=\"sy0\">=<\/span>ALL<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSess\u00e3o alterada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"coMULTI\">\/* dbtw-056.1 *\/<\/span> <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM dbtw056<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE codigo<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; CODIGO PRODUTO<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">--------------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">11<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Oracle Performance and Tuning<br \/>\n<br \/>\n<span class=\"nu0\">1<\/span> linha selecionada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column sql_id new_value m_sql_id<br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column child_number new_value m_child_no<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT sql_id<span class=\"sy0\">,<\/span> child_number<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM v<span class=\"re0\">$sql<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE sql_text LIKE <span class=\"st_h\">'%dbtw-056.1%'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; AND sql_text NOT LIKE <span class=\"st_h\">'%v$sql%'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSQL_ID &nbsp; &nbsp; &nbsp; &nbsp;CHILD_NUMBER<br \/>\n<span class=\"sy0\">-------------<\/span> <span class=\"sy0\">------------<\/span><br \/>\ncfp3qwbjnr0kq &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><br \/>\n<br \/>\n<span class=\"nu0\">1<\/span> linha selecionada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'ALLSTATS LAST'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nPLAN_TABLE_OUTPUT<br \/>\n<span class=\"sy0\">------------------------------------------------------------------------------------------------------------------------<\/span><br \/>\nSQL_ID &nbsp;cfp3qwbjnr0kq<span class=\"sy0\">,<\/span> child number <span class=\"nu0\">0<\/span><br \/>\n<span class=\"sy0\">-------------------------------------<\/span><br \/>\nSELECT <span class=\"coMULTI\">\/* dbtw-056.1 *\/<\/span> <span class=\"sy0\">*<\/span> &nbsp; FROM dbtw056 &nbsp;WHERE codigo<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><br \/>\n<br \/>\nPlan <a href=\"http:\/\/www.php.net\/hash\"><span class=\"kw3\">hash<\/span><\/a> value<span class=\"sy0\">:<\/span> <span class=\"nu0\">1201093745<\/span><br \/>\n<br \/>\n<span class=\"sy0\">--------------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> Id &nbsp;<span class=\"sy0\">|<\/span> Operation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Starts <span class=\"sy0\">|<\/span> E<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> A<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> &nbsp; A<span class=\"sy0\">-<\/span><a href=\"http:\/\/www.php.net\/time\"><span class=\"kw3\">Time<\/span><\/a> &nbsp; <span class=\"sy0\">|<\/span> Buffers <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">--------------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">0<\/span> <span class=\"sy0\">|<\/span> SELECT STATEMENT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">4<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;TABLE ACCESS BY INDEX ROWID BATCHED<span class=\"sy0\">|<\/span> DBTW056 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">4<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &nbsp; INDEX <a href=\"http:\/\/www.php.net\/range\"><span class=\"kw3\">RANGE<\/span><\/a> SCAN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> DBTW056_CODIGO_IDX <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">--------------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<br \/>\nPredicate Information <span class=\"br0\">&#40;<\/span>identified by operation id<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------<\/span><br \/>\n<br \/>\n&nbsp; &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CODIGO&quot;<\/span><span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nNote<br \/>\n<span class=\"sy0\">-----<\/span><br \/>\n&nbsp; &nbsp;<span class=\"sy0\">-<\/span> dynamic statistics used<span class=\"sy0\">:<\/span> dynamic sampling <span class=\"br0\">&#40;<\/span>level<span class=\"sy0\">=<\/span>AUTO<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">23<\/span> linhas selecionadas<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Observe no plano de execu\u00e7\u00e3o que apesar das estat\u00edsticas serem imprecisas o Otimizador estimou com precis\u00e3o que seria selecionada 1 linha na tabela, esta estimativa foi poss\u00edvel pois o recurso DYNAMIC SAMPLING foi utilizado e o Otimizador decidiu utilizar o \u00edndice no plano de execu\u00e7\u00e3o.<\/span><\/p>\n<h2><span style=\"font-size: 14pt;\">2.3) Coletar as estat\u00edsticas e executar a consulta novamente<\/span><\/h2>\n<h2><\/h2>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:100%;height:520px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> <a href=\"http:\/\/www.php.net\/exec\"><span class=\"kw3\">exec<\/span><\/a> dbms_stats<span class=\"sy0\">.<\/span>gather_table_stats<span class=\"br0\">&#40;<\/span>ownname<span class=\"sy0\">=&gt;<\/span> USER<span class=\"sy0\">,<\/span> tabname<span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'DBTW056'<\/span><span class=\"sy0\">,<\/span> cascade<span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">,<\/span> method_opt<span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'FOR ALL COLUMNS SIZE 1'<\/span><span class=\"sy0\">,<\/span>force<span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">,<\/span>degree<span class=\"sy0\">=&gt;<\/span> <span class=\"nu0\">16<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nProcedimento PL<span class=\"sy0\">\/<\/span>SQL conclu\u00ed<span class=\"kw1\">do<\/span> com sucesso<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT column_name <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;NAME&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_distinct <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;#DISTINCT&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp; &nbsp; density <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;DENSITY&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_nulls <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;#NULL&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; &nbsp; &nbsp; avg_col_len <span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">6<\/span> &nbsp; &nbsp; &nbsp; &nbsp; histogram<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">7<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_buckets <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;#BUCKETS&quot;<\/span><br \/>\n&nbsp; <span class=\"nu0\">8<\/span> &nbsp; &nbsp;FROM dba_tab_col_statistics<br \/>\n&nbsp; <span class=\"nu0\">9<\/span> &nbsp; WHERE table_name <span class=\"sy0\">=<\/span> <span class=\"st_h\">'DBTW056'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nNAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"co2\">#DISTINCT &nbsp; &nbsp; &nbsp;DENSITY &nbsp; &nbsp; &nbsp;#NULL AVG_COL_LEN HISTOGRAM &nbsp; &nbsp; &nbsp; &nbsp; #BUCKETS<br \/>\n<\/span><span class=\"sy0\">------------------------------<\/span> <span class=\"sy0\">----------------<\/span> <span class=\"sy0\">------------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">-----------<\/span> <span class=\"sy0\">---------------<\/span> <span class=\"sy0\">----------<\/span><br \/>\nCODIGO &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">20<\/span> &nbsp; <span class=\"nu19\">.050000000<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">3<\/span> NONE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">1<\/span><br \/>\nPRODUTO &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">1<\/span> &nbsp;<span class=\"nu19\">1.000000000<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">45<\/span> NONE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">1<\/span><br \/>\n<br \/>\n<span class=\"nu0\">2<\/span> linhas selecionadas<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET optimizer_dynamic_sampling<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSess\u00e3o alterada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET statistics_level<span class=\"sy0\">=<\/span>ALL<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSess\u00e3o alterada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"coMULTI\">\/* dbtw-056.2 *\/<\/span> <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM dbtw056<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE codigo<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; CODIGO PRODUTO<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">--------------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">11<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Oracle Performance and Tuning<br \/>\n<br \/>\n<span class=\"nu0\">1<\/span> linha selecionada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column sql_id new_value m_sql_id<br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column child_number new_value m_child_no<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT sql_id<span class=\"sy0\">,<\/span> child_number<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM v<span class=\"re0\">$sql<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE sql_text LIKE <span class=\"st_h\">'%dbtw-056.2%'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; AND sql_text NOT LIKE <span class=\"st_h\">'%v$sql%'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSQL_ID &nbsp; &nbsp; &nbsp; &nbsp;CHILD_NUMBER<br \/>\n<span class=\"sy0\">-------------<\/span> <span class=\"sy0\">------------<\/span><br \/>\nd4krxbj892rwr &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><br \/>\n<br \/>\n<span class=\"nu0\">1<\/span> linha selecionada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'ALLSTATS LAST'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nPLAN_TABLE_OUTPUT<br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------------------------------------------------------------------------------------<\/span><br \/>\nSQL_ID &nbsp;d4krxbj892rwr<span class=\"sy0\">,<\/span> child number <span class=\"nu0\">0<\/span><br \/>\n<span class=\"sy0\">-------------------------------------<\/span><br \/>\nSELECT <span class=\"coMULTI\">\/* dbtw-056.2 *\/<\/span> <span class=\"sy0\">*<\/span> &nbsp; FROM dbtw056 &nbsp;WHERE codigo<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><br \/>\n<br \/>\nPlan <a href=\"http:\/\/www.php.net\/hash\"><span class=\"kw3\">hash<\/span><\/a> value<span class=\"sy0\">:<\/span> <span class=\"nu0\">1201093745<\/span><br \/>\n<br \/>\n<span class=\"sy0\">--------------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> Id &nbsp;<span class=\"sy0\">|<\/span> Operation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Starts <span class=\"sy0\">|<\/span> E<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> A<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> &nbsp; A<span class=\"sy0\">-<\/span><a href=\"http:\/\/www.php.net\/time\"><span class=\"kw3\">Time<\/span><\/a> &nbsp; <span class=\"sy0\">|<\/span> Buffers <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">--------------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">0<\/span> <span class=\"sy0\">|<\/span> SELECT STATEMENT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">4<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;TABLE ACCESS BY INDEX ROWID BATCHED<span class=\"sy0\">|<\/span> DBTW056 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">4<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &nbsp; INDEX <a href=\"http:\/\/www.php.net\/range\"><span class=\"kw3\">RANGE<\/span><\/a> SCAN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> DBTW056_CODIGO_IDX <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">--------------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<br \/>\nPredicate Information <span class=\"br0\">&#40;<\/span>identified by operation id<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------<\/span><br \/>\n<br \/>\n&nbsp; &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CODIGO&quot;<\/span><span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nNote<br \/>\n<span class=\"sy0\">-----<\/span><br \/>\n&nbsp; &nbsp;<span class=\"sy0\">-<\/span> dynamic statistics used<span class=\"sy0\">:<\/span> dynamic sampling <span class=\"br0\">&#40;<\/span>level<span class=\"sy0\">=<\/span>AUTO<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">23<\/span> linhas selecionadas<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Ap\u00f3s a execu\u00e7\u00e3o da coleta das estat\u00edsticas podemos observar no SELECT na vis\u00e3o DBA_TAB_COL_STATISTICS que o numero de linhas distintas agora esta correto (20 linhas) porem n\u00e3o existem histogramas nas duas colunas da tabela, observando o plano de execu\u00e7\u00e3o verificamos que o Otimizador estimou o numero de linhas de forma precisa novamente e criou um plano de execu\u00e7\u00e3o com acesso a tabela utilizando o \u00edndice. Para estimar a cardinalidade da opera\u00e7\u00e3o de acesso a tabela corretamente sem a ajuda de HISTOGRAMAS o Otimizador utilizou o recurso DYNAMIC SAMPLING.<\/span><\/p>\n<h2><span style=\"font-size: 14pt;\">2.4) Inserir registros na tabela para as estat\u00edsticas ficarem desatualizadas<\/span><\/h2>\n<h2><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Vamos executar o comando de coleta de estat\u00edsticas novamente para criar um HISTOGRAMA na coluna C\u00d3DIGO da tabela e na sequencia vamos inserir 2.000 linhas na tabela (10%) para for\u00e7ar uma situa\u00e7\u00e3o de estat\u00edsticas desatualizadas e inserir 4 linhas com o valor 11 na coluna C\u00d3DIGO\u00a0que esta sendo utilizada no filtro da cl\u00e1usula WHERE, na sequ\u00eancia vamos executar a consulta novamente e verificar se o recurso DYNAMIC SAMPLING vai ser utilizado.<\/span><\/p>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:100%;height:520px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> <a href=\"http:\/\/www.php.net\/exec\"><span class=\"kw3\">exec<\/span><\/a> dbms_stats<span class=\"sy0\">.<\/span>gather_table_stats<span class=\"br0\">&#40;<\/span>ownname<span class=\"sy0\">=&gt;<\/span> USER<span class=\"sy0\">,<\/span> tabname<span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'DBTW056'<\/span><span class=\"sy0\">,<\/span> cascade<span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">,<\/span> method_opt<span class=\"sy0\">=&gt;<\/span> <span class=\"st_h\">'FOR ALL COLUMNS SIZE AUTO'<\/span><span class=\"sy0\">,<\/span>force<span class=\"sy0\">=&gt;<\/span> <span class=\"kw4\">true<\/span><span class=\"sy0\">,<\/span>degree<span class=\"sy0\">=&gt;<\/span> <span class=\"nu0\">16<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nProcedimento PL<span class=\"sy0\">\/<\/span>SQL conclu\u00ed<span class=\"kw1\">do<\/span> com sucesso<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT column_name <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;NAME&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_distinct <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;#DISTINCT&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp; &nbsp; density <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;DENSITY&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_nulls <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;#NULL&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; &nbsp; &nbsp; avg_col_len <span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">6<\/span> &nbsp; &nbsp; &nbsp; &nbsp; histogram<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">7<\/span> &nbsp; &nbsp; &nbsp; &nbsp; num_buckets <span class=\"kw1\">AS<\/span> <span class=\"st0\">&quot;#BUCKETS&quot;<\/span><br \/>\n&nbsp; <span class=\"nu0\">8<\/span> &nbsp; &nbsp;FROM dba_tab_col_statistics<br \/>\n&nbsp; <span class=\"nu0\">9<\/span> &nbsp; WHERE table_name <span class=\"sy0\">=<\/span> <span class=\"st_h\">'DBTW056'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nNAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co2\">#DISTINCT &nbsp; &nbsp;DENSITY &nbsp; &nbsp; &nbsp;#NULL AVG_COL_LEN HISTOGRAM &nbsp; &nbsp; &nbsp; &nbsp; #BUCKETS<br \/>\n<\/span><span class=\"sy0\">-------------------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">-----------<\/span> <span class=\"sy0\">---------------<\/span> <span class=\"sy0\">----------<\/span><br \/>\nCODIGO &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">20<\/span> &nbsp; &nbsp; <span class=\"sy0\">,<\/span><span class=\"nu8\">00005<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">3<\/span> FREQUENCY &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">20<\/span><br \/>\nPRODUTO &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">45<\/span> NONE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">1<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> INSERT INTO dbtw056 select <span class=\"nu0\">15<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'DBTimeWizard - Oracle Performance and Tuning'<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;from dual connect by level<span class=\"sy0\">&lt;=<\/span> <span class=\"nu0\">2000<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"nu0\">2000<\/span> linhas criadas<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> INSERT INTO dbtw056 select <span class=\"nu0\">11<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'DBTimeWizard - Oracle Performance and Tuning'<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;from dual connect by level<span class=\"sy0\">&lt;=<\/span> <span class=\"nu0\">4<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"nu0\">4<\/span> linhas criadas<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> COMMIT<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nCommit conclu\u00ed<span class=\"kw1\">do<\/span><span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> <a href=\"http:\/\/www.php.net\/exec\"><span class=\"kw3\">exec<\/span><\/a> dbms_stats<span class=\"sy0\">.<\/span>FLUSH_DATABASE_MONITORING_INFO<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nProcedimento PL<span class=\"sy0\">\/<\/span>SQL conclu\u00ed<span class=\"kw1\">do<\/span> com sucesso<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT table_name<span class=\"sy0\">,<\/span> stale_stats<span class=\"sy0\">,<\/span> last_analyzed<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM dba_tab_statistics<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE table_name<span class=\"sy0\">=<\/span><span class=\"st_h\">'DBTW056'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nTABLE_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; STA LAST_ANA<br \/>\n<span class=\"sy0\">----------------------------------------<\/span> <span class=\"sy0\">---<\/span> <span class=\"sy0\">--------<\/span><br \/>\nDBTW056 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;YES <span class=\"nu0\">18<\/span><span class=\"sy0\">\/<\/span><span class=\"nu0\">10<\/span><span class=\"sy0\">\/<\/span><span class=\"nu0\">18<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Observe no select na vis\u00e3o DBA_TAB_COL_STATISTICS que o HISTOGRAMA foi criado na coluna C\u00d3DIGO e no SELECT na vis\u00e3o DBA_TAB_STATISTICS que o campo STALE_STATS esta como YES o que indica que as estat\u00edsticas est\u00e3o desatualizadas.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-size: 14pt;\">2.5) Executar a consulta novamente<\/span><\/h2>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:100%;height:520px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET optimizer_dynamic_sampling<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSess\u00e3o alterada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET statistics_level<span class=\"sy0\">=<\/span>ALL<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSess\u00e3o alterada<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"coMULTI\">\/* dbtw-056.3 *\/<\/span> <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM dbtw056<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE codigo<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; CODIGO PRODUTO<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">--------------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">11<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Oracle Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">11<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Oracle Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">11<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Oracle Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">11<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Oracle Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">11<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Oracle Performance and Tuning<br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column sql_id new_value m_sql_id<br \/>\nSQL <span class=\"sy0\">&gt;<\/span> column child_number new_value m_child_no<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT sql_id<span class=\"sy0\">,<\/span> child_number<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM v<span class=\"re0\">$sql<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE sql_text LIKE <span class=\"st_h\">'%dbtw-056.3%'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; AND sql_text NOT LIKE <span class=\"st_h\">'%v$sql%'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSQL_ID &nbsp; &nbsp; &nbsp; &nbsp;CHILD_NUMBER<br \/>\n<span class=\"sy0\">-------------<\/span> <span class=\"sy0\">------------<\/span><br \/>\nfnytft0gnc6s2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">0<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> SELECT <span class=\"sy0\">*<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'ALLSTATS LAST'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\nantigo &nbsp; <span class=\"nu0\">2<\/span><span class=\"sy0\">:<\/span> &nbsp; FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'&amp;m_sql_id'<\/span><span class=\"sy0\">,&amp;<\/span>m_child_no<span class=\"sy0\">,<\/span><span class=\"st_h\">'ALLSTATS LAST'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\nnovo &nbsp; <span class=\"nu0\">2<\/span><span class=\"sy0\">:<\/span> &nbsp; FROM TABLE <span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display_cursor <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'fnytft0gnc6s2'<\/span><span class=\"sy0\">,<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'ALLSTATS LAST'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nPLAN_TABLE_OUTPUT<br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------------------------------------------------------<\/span><br \/>\nSQL_ID &nbsp;fnytft0gnc6s2<span class=\"sy0\">,<\/span> child number <span class=\"nu0\">0<\/span><br \/>\n<span class=\"sy0\">-------------------------------------<\/span><br \/>\nSELECT <span class=\"coMULTI\">\/* dbtw-056.3 *\/<\/span> <span class=\"sy0\">*<\/span> &nbsp; FROM dbtw056 &nbsp;WHERE codigo<span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><br \/>\n<br \/>\nPlan <a href=\"http:\/\/www.php.net\/hash\"><span class=\"kw3\">hash<\/span><\/a> value<span class=\"sy0\">:<\/span> <span class=\"nu0\">1201093745<\/span><br \/>\n<br \/>\n<span class=\"sy0\">--------------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> Id &nbsp;<span class=\"sy0\">|<\/span> Operation &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Starts <span class=\"sy0\">|<\/span> E<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> A<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span> &nbsp; A<span class=\"sy0\">-<\/span><a href=\"http:\/\/www.php.net\/time\"><span class=\"kw3\">Time<\/span><\/a> &nbsp; <span class=\"sy0\">|<\/span> Buffers <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">--------------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">0<\/span> <span class=\"sy0\">|<\/span> SELECT STATEMENT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">5<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">5<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;TABLE ACCESS BY INDEX ROWID BATCHED<span class=\"sy0\">|<\/span> DBTW056 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">5<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">5<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">5<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &nbsp; INDEX <a href=\"http:\/\/www.php.net\/range\"><span class=\"kw3\">RANGE<\/span><\/a> SCAN &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> DBTW056_CODIGO_IDX <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">5<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">5<\/span> <span class=\"sy0\">|<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu8\">00<\/span><span class=\"sy0\">:<\/span><span class=\"nu19\">00.01<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">--------------------------------------------------------------------------------------------------------------------<\/span><br \/>\n<br \/>\nPredicate Information <span class=\"br0\">&#40;<\/span>identified by operation id<span class=\"br0\">&#41;<\/span><span class=\"sy0\">:<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------<\/span><br \/>\n<br \/>\n&nbsp; &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CODIGO&quot;<\/span><span class=\"sy0\">=<\/span><span class=\"nu0\">11<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nNote<br \/>\n<span class=\"sy0\">-----<\/span><br \/>\n&nbsp; &nbsp;<span class=\"sy0\">-<\/span> dynamic statistics used<span class=\"sy0\">:<\/span> dynamic sampling <span class=\"br0\">&#40;<\/span>level<span class=\"sy0\">=<\/span>AUTO<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">23<\/span> linhas selecionadas<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Analisando o plano de execu\u00e7\u00e3o acima podemos constatar que o Otimizador estimou com precis\u00e3o que seriam selecionadas 5 linhas na tabela, esta estimativa n\u00e3o foi obtida no HISTOGRAMA da coluna C\u00d3DIGO pois foram inseridas 4 linhas ap\u00f3s a coleta do HISTOGRAMA, ou seja, o recurso DYNAMIC SAMPLING foi utilizado novamente pois as estat\u00edsticas estavam desatualizadas.<\/span><\/p>\n<h2><span style=\"font-size: 14pt;\">CONCLUS\u00c3O<\/span><\/h2>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">O recurso DYNAMIC SAMPLING na vers\u00e3o 12cR2 ficou muito robusto, com ele o Otimizador passou a ser capaz de identificar v\u00e1rias situa\u00e7\u00f5es onde as estat\u00edsticas dos objetos do banco s\u00e3o insuficientes para garantir uma estimativa de cardinalidade satisfatoria. Esta \u00e9 apenas uma das muitas melhorias implementadas no Oracle 12cR2 visando melhorar a qualidade dos planos de execu\u00e7\u00e3o gerados pelo Otimizador.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-size: 14pt;\">Refer\u00eancias<\/span><\/h2>\n<p><strong><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/12.2\/refrn\/OPTIMIZER_DYNAMIC_SAMPLING.html\" target=\"_blank\">https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/12.2<\/a><\/strong><br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n<a href=\"http:\/\/dbtimewizard.com.br\/treinamento\/\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-1255\" src=\"http:\/\/dbtimewizard.com.br\/blog\/wp-content\/uploads\/2018\/10\/promo_cur02.jpg\" alt=\"Promo-D75L\" width=\"330\" height=\"242\" \/><\/a><\/p>\n<p><a href=\"https:\/\/youtu.be\/l6OphhTle9I\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright size-full wp-image-1215\" src=\"http:\/\/dbtimewizard.com.br\/wp-content\/uploads\/2018\/01\/video-02-300x168.jpg\" alt=\"video-02\" width=\"330\" height=\"242\" \/><\/a><br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O Otimizador do Oracle cria planos de execu\u00e7\u00e3o com alta performance baseado nas estat\u00edsticas dos objetos no banco de dados, com estas informa\u00e7\u00f5es ele consegue fazer estimativas de acesso para cada uma das opera\u00e7\u00f5es no plano de execu\u00e7\u00e3o e a qualidade destas estimativas \u00e9 que determina o desempenho das instru\u00e7\u00f5es SQL, mas o que acontece quando algum objeto envolvido na<\/p>\n","protected":false},"author":2,"featured_media":1813,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71],"tags":[163,103,39,162,161,82,10,205,119],"class_list":["post-1812","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-estatisticas","tag-dbms_stats","tag-dynamic-sampling","tag-estatisticas","tag-histogramas","tag-histograms","tag-optimizer","tag-otimizador","tag-stale-statistics","tag-statistics"],"aioseo_notices":[],"_links":{"self":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/1812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/comments?post=1812"}],"version-history":[{"count":31,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/1812\/revisions"}],"predecessor-version":[{"id":2072,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/1812\/revisions\/2072"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/media\/1813"}],"wp:attachment":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/media?parent=1812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/categories?post=1812"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/tags?post=1812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}