{"id":141,"date":"2015-12-06T20:32:05","date_gmt":"2015-12-06T22:32:05","guid":{"rendered":"http:\/\/dbtimewizard.com.br\/blog\/?p=141"},"modified":"2019-10-10T23:09:20","modified_gmt":"2019-10-11T02:09:20","slug":"execution-plan-como-interpretar-os-valores-estatisticos-estimados","status":"publish","type":"post","link":"http:\/\/dbtimewizard.com.br\/blog\/execution-plan-como-interpretar-os-valores-estatisticos-estimados\/","title":{"rendered":"Execution Plan: Como interpretar os valores estat\u00edsticos estimados"},"content":{"rendered":"<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">No artigo anterior sobre plano de execu\u00e7\u00e3o abordamos como identificar a sequ\u00eancia de execu\u00e7\u00e3o das opera\u00e7\u00f5es, outra parte muito importante no entendimento do plano de execu\u00e7\u00e3o s\u00e3o as informa\u00e7\u00f5es estat\u00edsticas que podem ser classificadas em dois grupos:<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">1) As estat\u00edsticas estimadas pelo otimizador que s\u00e3o usadas no processo de parse para escolher dentre alguns planos criados, um que supostamente seria o mais r\u00e1pido.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">2) As estat\u00edsticas reais ou que representam o que foi realizado durante a execu\u00e7\u00e3o da instru\u00e7\u00e3o SQL, essas estat\u00edsticas s\u00e3o recuperadas da vis\u00e3o &#8220;V$SQL_PLAN_STATISTICS_ALL&#8221;.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Nesse artigo vamos explorar os mecanismos utilizados pelo Otimizador para calcular as estat\u00edsticas estimadas e vamos deixar para o pr\u00f3ximo post as estat\u00edsticas reais .<\/span><\/p>\n<h2><span style=\"font-size: 14pt;\">Plano de execu\u00e7\u00e3o<\/span><\/h2>\n<p><span style=\"font-size: 12pt;\">A seguir temos um plano de execu\u00e7\u00e3o gerado em uma inst\u00e2ncia 11.2.0.4 a partir do comando EXPLAIN PLAN:<\/span><\/p>\n<p>&nbsp;<\/p>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:800px;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 \/><\/div><\/td><td><div class=\"php codecolorer\">appuser<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> EXPLAIN PLAN <span class=\"kw1\">FOR<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp;SELECT my_tables<span class=\"sy0\">.<\/span>owner<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp; &nbsp; my_tables<span class=\"sy0\">.<\/span>table_name<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; &nbsp; &nbsp; my_tables<span class=\"sy0\">.<\/span>tablespace_name<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; &nbsp; &nbsp; my_indexes<span class=\"sy0\">.<\/span>status<br \/>\n&nbsp; <span class=\"nu0\">6<\/span> &nbsp; &nbsp;FROM my_tables<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">7<\/span> &nbsp; &nbsp; &nbsp; &nbsp; my_indexes<br \/>\n&nbsp; <span class=\"nu0\">8<\/span> &nbsp; WHERE my_tables<span class=\"sy0\">.<\/span>owner <span class=\"sy0\">=<\/span> my_indexes<span class=\"sy0\">.<\/span>table_owner<br \/>\n&nbsp; <span class=\"nu0\">9<\/span> &nbsp; &nbsp; AND my_tables<span class=\"sy0\">.<\/span>table_name <span class=\"sy0\">=<\/span> my_indexes<span class=\"sy0\">.<\/span>table_name<br \/>\n&nbsp;<span class=\"nu0\">10<\/span> &nbsp; &nbsp; AND my_indexes<span class=\"sy0\">.<\/span>index_type <span class=\"sy0\">=<\/span> <span class=\"st_h\">'FUNCTION-BASED NORMAL'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nExplained<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nappuser<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> select <span class=\"sy0\">*<\/span> from table<span class=\"br0\">&#40;<\/span>dbms_xplan<span class=\"sy0\">.<\/span>display<span class=\"br0\">&#40;<\/span><span class=\"kw4\">null<\/span><span class=\"sy0\">,<\/span> <span class=\"kw4\">null<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'projection'<\/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 \/>\nPlan <a href=\"http:\/\/www.php.net\/hash\"><span class=\"kw3\">hash<\/span><\/a> value<span class=\"sy0\">:<\/span> <span class=\"nu0\">2089828105<\/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;<span class=\"sy0\">|<\/span> Name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> Rows &nbsp;<span class=\"sy0\">|<\/span> Bytes <span class=\"sy0\">|<\/span> Cost <span class=\"br0\">&#40;<\/span><span class=\"sy0\">%<\/span>CPU<span class=\"br0\">&#41;<\/span><span class=\"sy0\">|<\/span> <a href=\"http:\/\/www.php.net\/time\"><span class=\"kw3\">Time<\/span><\/a> &nbsp; &nbsp; <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;<span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">34<\/span> <span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">2550<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">21<\/span> &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/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=\"nu8\">01<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp;<a href=\"http:\/\/www.php.net\/hash\"><span class=\"kw3\">HASH<\/span><\/a> <a href=\"http:\/\/www.php.net\/join\"><span class=\"kw3\">JOIN<\/span><\/a> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">34<\/span> <span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">2550<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">21<\/span> &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/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=\"nu8\">01<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">2<\/span> <span class=\"sy0\">|<\/span> &nbsp; TABLE ACCESS BY INDEX ROWID<span class=\"sy0\">|<\/span> MY_INDEXES &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">34<\/span> <span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">1360<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; <span class=\"nu0\">6<\/span> &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/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=\"nu8\">01<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|*<\/span> &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">|<\/span> &nbsp; &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> MY_INDEXES_IDX <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">34<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; <span class=\"nu0\">2<\/span> &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/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=\"nu8\">01<\/span> <span class=\"sy0\">|<\/span><br \/>\n<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">4<\/span> <span class=\"sy0\">|<\/span> &nbsp; INDEX FAST FULL SCAN &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> MY_TABLES_IDX &nbsp;<span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">8015<\/span> <span class=\"sy0\">|<\/span> &nbsp; 273K<span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">15<\/span> &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/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=\"nu8\">01<\/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> access<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;MY_TABLES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;OWNER&quot;<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;MY_INDEXES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;TABLE_OWNER&quot;<\/span> AND<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;MY_TABLES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;TABLE_NAME&quot;<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;MY_INDEXES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;TABLE_NAME&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">-<\/span> access<span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;MY_INDEXES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;INDEX_TYPE&quot;<\/span><span class=\"sy0\">=<\/span><span class=\"st_h\">'FUNCTION-BASED NORMAL'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nColumn Projection 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> <span class=\"br0\">&#40;<\/span><span class=\"co2\">#keys=2) &quot;MY_TABLES&quot;.&quot;OWNER&quot;[VARCHAR2,30],<br \/>\n<\/span> &nbsp; &nbsp; &nbsp; <span class=\"st0\">&quot;MY_TABLES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;TABLE_NAME&quot;<\/span><span class=\"br0\">&#91;<\/span>VARCHAR2<span class=\"sy0\">,<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;MY_INDEXES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;STATUS&quot;<\/span><span class=\"br0\">&#91;<\/span>VARCHAR2<span class=\"sy0\">,<\/span><span class=\"nu0\">8<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"st0\">&quot;MY_TABLES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;TABLESPACE_NAME&quot;<\/span><span class=\"br0\">&#91;<\/span>VARCHAR2<span class=\"sy0\">,<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"nu0\">2<\/span> <span class=\"sy0\">-<\/span> <span class=\"st0\">&quot;MY_INDEXES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;TABLE_OWNER&quot;<\/span><span class=\"br0\">&#91;<\/span>VARCHAR2<span class=\"sy0\">,<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"st0\">&quot;MY_INDEXES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;TABLE_NAME&quot;<\/span><span class=\"br0\">&#91;<\/span>VARCHAR2<span class=\"sy0\">,<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;MY_INDEXES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;STATUS&quot;<\/span><span class=\"br0\">&#91;<\/span>VARCHAR2<span class=\"sy0\">,<\/span><span class=\"nu0\">8<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"nu0\">3<\/span> <span class=\"sy0\">-<\/span> <span class=\"st0\">&quot;MY_INDEXES&quot;<\/span><span class=\"sy0\">.<\/span>ROWID<span class=\"br0\">&#91;<\/span>ROWID<span class=\"sy0\">,<\/span><span class=\"nu0\">10<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;MY_INDEXES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;TABLE_OWNER&quot;<\/span><span class=\"br0\">&#91;<\/span>VARCHAR2<span class=\"sy0\">,<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"st0\">&quot;MY_INDEXES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;TABLE_NAME&quot;<\/span><span class=\"br0\">&#91;<\/span>VARCHAR2<span class=\"sy0\">,<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp;<span class=\"nu0\">4<\/span> <span class=\"sy0\">-<\/span> <span class=\"st0\">&quot;MY_TABLES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;OWNER&quot;<\/span><span class=\"br0\">&#91;<\/span>VARCHAR2<span class=\"sy0\">,<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span> <span class=\"st0\">&quot;MY_TABLES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;TABLE_NAME&quot;<\/span><span class=\"br0\">&#91;<\/span>VARCHAR2<span class=\"sy0\">,<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"st0\">&quot;MY_TABLES&quot;<\/span><span class=\"sy0\">.<\/span><span class=\"st0\">&quot;TABLESPACE_NAME&quot;<\/span><span class=\"br0\">&#91;<\/span>VARCHAR2<span class=\"sy0\">,<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#93;<\/span><br \/>\n<br \/>\n<span class=\"nu0\">31<\/span> rows selected<span class=\"sy0\">.<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Utilizando as regras do artigo &#8220;<a href=\"http:\/\/dbtimewizard.com.br\/blog\/execution-plan-como-verificar-a-ordem-que-as-operacoes-sao-realizadas\/\" target=\"_blank\">Execution Plan: Como verificar a ordem que as opera\u00e7\u00f5es s\u00e3o realizadas?<\/a>&#8221; podemos identificar que a sequ\u00eancia de execu\u00e7\u00e3o das opera\u00e7\u00f5es desse plano ser\u00e1: 3,2,4,1,0<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">A primeira opera\u00e7\u00e3o (Id 3) desse plano de execu\u00e7\u00e3o ser\u00e1 um &#8220;INDEX RANGE SCAN&#8221; no \u00edndice MY_INDEXES_IDX obtendo uma lista de 34 &#8220;ROWID&#8221;, esta lista ser\u00e1 entregue a opera\u00e7\u00e3o pai (Id 2) que vai acessar 34 registros da tabela MY_INDEXES utilizando esses &#8220;ROWID&#8221; e criar uma tabela &#8220;HASH&#8221; na memoria. Em seguida ser\u00e1 realizada a opera\u00e7\u00e3o (Id 4) &#8220;INDEX FAST FULL SCAN&#8221; que vai ler todo o \u00edndice MY_TABLES_IDX (8015 registros) e passar para opera\u00e7\u00e3o (Id 1) &#8220;HASH JOIN&#8221;, esta por sua vez vai juntar os registros entregues pelas 2 opera\u00e7\u00f5es filhas (2,4) e passar o resultado para opera\u00e7\u00e3o (Id 0) &#8220;SELECT STATEMENT&#8221;.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Descri\u00e7\u00e3o b\u00e1sica das estat\u00edsticas<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">A seguir um descri\u00e7\u00e3o resumida do que representa cada uma das colunas de informa\u00e7\u00f5es estat\u00edsticas estimadas:<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\"><strong>ROWS<\/strong>: N\u00famero estimado de linhas resultantes de uma execu\u00e7\u00e3o da opera\u00e7\u00e3o examinada e que ser\u00e3o entregues a opera\u00e7\u00e3o pai.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\"><strong>BYTES<\/strong>: N\u00famero estimado de bytes (rows x estimativa tamanho m\u00e9dio do registro) resultantes de uma execu\u00e7\u00e3o da opera\u00e7\u00e3o examinada e que ser\u00e3o entregues a opera\u00e7\u00e3o pai.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\"><strong>COST<\/strong>: N\u00famero estimado de recursos necess\u00e1rios para uma execu\u00e7\u00e3o da opera\u00e7\u00e3o examinada, incluindo os valores de recursos de todas as opera\u00e7\u00f5es descendentes necess\u00e1rias para execu\u00e7\u00e3o dessa opera\u00e7\u00e3o pelo menos uma vez. O valor entre parenteses (%CPU) representa um percentual do COST que ser\u00e1 atribuido as atividades de CPU.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\"><strong>TIME<\/strong>: Tempo de resposta estimado (horas:minutos:segundos) para execu\u00e7\u00e3o da opera\u00e7\u00e3o um vez e como a coluna COST, o tempo de resposta para executar um vez a opera\u00e7\u00e3o inclui os tempos de todas as opera\u00e7\u00f5es filhas necess\u00e1rias para executar uma vez essa opera\u00e7\u00e3o.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Um ponto importante a ser enfatizado \u00e9 que os valores estat\u00edsticos descritos em uma linha do plano representam a execu\u00e7\u00e3o dessa opera\u00e7\u00e3o somente um vez. outro ponto importante \u00e9 que os valores COST e TIME s\u00e3o cumulativos, ou seja, uma opera\u00e7\u00e3o pai acumula esses valores de todas as opera\u00e7\u00f5es filhas.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Entendendo o algoritmo do otimizador<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Tomando como base\u00a0as defini\u00e7\u00f5es acima vamos aplica-las no plano de execu\u00e7\u00e3o do inicio do artigo que \u00e9 um plano simples. Considerando a sequ\u00eancia de execu\u00e7\u00e3o das opera\u00e7\u00f5es: 3,2,4,1,0<\/span><\/p>\n<h3 style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Linha 3: INDEX RANGE SCAN<\/span><\/h3>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">O otimizador estimou 34 registros baseado nas &#8220;Histograms statistics&#8221; para os registros cuja coluna INDEX_TYPE =&#8217;FUNCTION-BASED NORMAL&#8217;, mas deixou em branco o numero de bytes. Ele estimou que para ler esses 34 registros haver\u00e1 um custo de 2 (COST=2), ou seja, seria necess\u00e1rio realizar 2 leituras f\u00edsicas. A estimativa de tempo de resposta seria o resultado da opera\u00e7\u00e3o (2 x sreadtime), onde sreadtime (single block readtime) \u00e9 igual a 10ms no caso da base que gerou o plano, ou seja fazendo o arredondamento para segundos \u00e9 igual a 1 segundo.<\/span><\/p>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:800px;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 \/><\/div><\/td><td><div class=\"php codecolorer\">appuser<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span>select endpoint_number<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp; &nbsp; &nbsp; endpoint_number <span class=\"sy0\">-<\/span> nvl<span class=\"br0\">&#40;<\/span>prev_endpoint<span class=\"sy0\">,<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> &nbsp;frequency<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; &nbsp; &nbsp; hex_val<span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.php.net\/chr\"><span class=\"kw3\">chr<\/span><\/a><span class=\"br0\">&#40;<\/span>to_number<span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/substr\"><span class=\"kw3\">substr<\/span><\/a><span class=\"br0\">&#40;<\/span>hex_val<span class=\"sy0\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'XX'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span><br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.php.net\/chr\"><span class=\"kw3\">chr<\/span><\/a><span class=\"br0\">&#40;<\/span>to_number<span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/substr\"><span class=\"kw3\">substr<\/span><\/a><span class=\"br0\">&#40;<\/span>hex_val<span class=\"sy0\">,<\/span> <span class=\"nu0\">4<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'XX'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span><br \/>\n&nbsp; <span class=\"nu0\">6<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.php.net\/chr\"><span class=\"kw3\">chr<\/span><\/a><span class=\"br0\">&#40;<\/span>to_number<span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/substr\"><span class=\"kw3\">substr<\/span><\/a><span class=\"br0\">&#40;<\/span>hex_val<span class=\"sy0\">,<\/span> <span class=\"nu0\">6<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'XX'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span><br \/>\n&nbsp; <span class=\"nu0\">7<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.php.net\/chr\"><span class=\"kw3\">chr<\/span><\/a><span class=\"br0\">&#40;<\/span>to_number<span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/substr\"><span class=\"kw3\">substr<\/span><\/a><span class=\"br0\">&#40;<\/span>hex_val<span class=\"sy0\">,<\/span> <span class=\"nu0\">8<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'XX'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span><br \/>\n&nbsp; <span class=\"nu0\">8<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.php.net\/chr\"><span class=\"kw3\">chr<\/span><\/a><span class=\"br0\">&#40;<\/span>to_number<span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/substr\"><span class=\"kw3\">substr<\/span><\/a><span class=\"br0\">&#40;<\/span>hex_val<span class=\"sy0\">,<\/span><span class=\"nu0\">10<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'XX'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">||<\/span><br \/>\n&nbsp; <span class=\"nu0\">9<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.php.net\/chr\"><span class=\"kw3\">chr<\/span><\/a><span class=\"br0\">&#40;<\/span>to_number<span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/substr\"><span class=\"kw3\">substr<\/span><\/a><span class=\"br0\">&#40;<\/span>hex_val<span class=\"sy0\">,<\/span><span class=\"nu0\">12<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'XX'<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;<span class=\"nu0\">10<\/span> &nbsp; &nbsp;from <span class=\"br0\">&#40;<\/span>select endpoint_number<span class=\"sy0\">,<\/span><br \/>\n&nbsp;<span class=\"nu0\">11<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lag<span class=\"br0\">&#40;<\/span>endpoint_number<span class=\"sy0\">,<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> over<span class=\"br0\">&#40;<\/span>order by endpoint_number<span class=\"br0\">&#41;<\/span> &nbsp;prev_endpoint<span class=\"sy0\">,<\/span><br \/>\n&nbsp;<span class=\"nu0\">12<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; to_char<span class=\"br0\">&#40;<\/span>endpoint_value<span class=\"sy0\">,<\/span><span class=\"st_h\">'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'<\/span><span class=\"br0\">&#41;<\/span> hex_val<span class=\"sy0\">,<\/span><br \/>\n&nbsp;<span class=\"nu0\">13<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; endpoint_actual_value<br \/>\n&nbsp;<span class=\"nu0\">14<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;from dba_tab_histograms<br \/>\n&nbsp;<span class=\"nu0\">15<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; where owner <span class=\"sy0\">=<\/span> <span class=\"st_h\">'APPUSER'<\/span><br \/>\n&nbsp;<span class=\"nu0\">16<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; and table_name <span class=\"sy0\">=<\/span> <span class=\"st_h\">'MY_INDEXES'<\/span><br \/>\n&nbsp;<span class=\"nu0\">17<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; and column_name <span class=\"sy0\">=<\/span> <span class=\"st_h\">'INDEX_TYPE'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp;<span class=\"nu0\">18<\/span> &nbsp; order by endpoint_number<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nENDPOINT_NUMBER &nbsp;FREQUENCY HEX_VAL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href=\"http:\/\/www.php.net\/chr\"><span class=\"kw3\">CHR<\/span><\/a><span class=\"br0\">&#40;<\/span>TO<br \/>\n<span class=\"sy0\">---------------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">----------------------------------------<\/span> <span class=\"sy0\">------<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">15<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">15<\/span> &nbsp;4249544D414FF9A1D6D1D37F000000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;BITMAO<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">16<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> &nbsp;444F4D41494E03F6FC852ECF800000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DOMAIN<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">50<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">34<\/span> &nbsp;46554E4354494BFD6E91EAC9000000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FUNCTI<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">208<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">158<\/span> &nbsp;494F54202D20622D7463C1D6A00000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;IOT <span class=\"sy0\">-<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">813<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">605<\/span> &nbsp;4C4F41FFFFFFEE7B00C6C106200000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;LOA\u00a0\u00a0\u00a0<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">12907<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">12094<\/span> &nbsp;4E4F524D414BFDC683A65461000000 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NORMAK<br \/>\n<br \/>\n<span class=\"nu0\">6<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nappuser<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><br \/>\nappuser<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> SET SERVEROUTPUT ON<span class=\"sy0\">;<\/span><br \/>\nappuser<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> <span class=\"kw2\">DECLARE<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;STATUS VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp;DSTART <a href=\"http:\/\/www.php.net\/date\"><span class=\"kw3\">DATE<\/span><\/a><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp;DSTOP <a href=\"http:\/\/www.php.net\/date\"><span class=\"kw3\">DATE<\/span><\/a><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp;PVALUE NUMBER<span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"nu0\">6<\/span> &nbsp; &nbsp;PNAME VARCHAR2<span class=\"br0\">&#40;<\/span><span class=\"nu0\">30<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"nu0\">7<\/span> &nbsp;BEGIN<br \/>\n&nbsp; <span class=\"nu0\">8<\/span> &nbsp; &nbsp;PNAME <span class=\"sy0\">:=<\/span> <span class=\"st_h\">'sreadtim'<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"nu0\">9<\/span> &nbsp; &nbsp;DBMS_STATS<span class=\"sy0\">.<\/span>GET_SYSTEM_STATS<span class=\"br0\">&#40;<\/span>status<span class=\"sy0\">,<\/span> dstart<span class=\"sy0\">,<\/span> dstop<span class=\"sy0\">,<\/span> pname<span class=\"sy0\">,<\/span> pvalue<span class=\"sy0\">,<\/span> stattab<span class=\"sy0\">=&gt;<\/span><span class=\"kw4\">null<\/span><span class=\"sy0\">,<\/span>statid<span class=\"sy0\">=&gt;<\/span><span class=\"kw4\">null<\/span><span class=\"sy0\">,<\/span>statown<span class=\"sy0\">=&gt;<\/span><span class=\"kw4\">null<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">10<\/span> &nbsp; &nbsp;DBMS_OUTPUT<span class=\"sy0\">.<\/span>PUT_LINE<span class=\"br0\">&#40;<\/span><span class=\"st_h\">'SINGLE BLOCK READTIME IN MS: '<\/span><span class=\"sy0\">||<\/span>pvalue<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">11<\/span> &nbsp;<a href=\"http:\/\/www.php.net\/end\"><span class=\"kw3\">END<\/span><\/a><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">12<\/span> &nbsp;<span class=\"sy0\">\/<\/span><br \/>\nSINGLE BLOCK READTIME IN MS<span class=\"sy0\">:<\/span> <span class=\"nu19\">10.085<\/span><br \/>\n<br \/>\nPL<span class=\"sy0\">\/<\/span>SQL procedure successfully completed<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nappuser<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<h3 style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Linha 2: TABLE ACCESS BY INDEX ROWID<\/span><\/h3>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">O otimizador estimou que ser\u00e3o lidos 34 registros da tabela &#8220;MY_INDEXES&#8221; que s\u00e3o correspondentes aos &#8220;ROWID&#8221; fornecidos pela opera\u00e7\u00e3o da linha 3. Considerando esses 34 registros da tabela &#8220;MY_INDEXES&#8221; o otimizador verificou\u00a0o tamanho m\u00e9dio dos campos dessa tabela que est\u00e3o sendo tratados nesta instru\u00e7\u00e3o SQL (campo AVG_COL_LEN da vis\u00e3o DBA_TAB_COLUMNS), na se\u00e7\u00e3o &#8220;Column Projection Information&#8221; podemos visualizar as colunas que est\u00e3o sendo tratadas em cada linha de opera\u00e7\u00e3o, na linha 2\u00a0as colunas TABLE_OWNER, TABLE_NAME e STATUS da tabela &#8220;MY_INDEXES&#8221; tem uma tamanho m\u00e9dio de 33 Bytes (34 x 33 = 1122), a multiplica\u00e7\u00e3o desse tamanho pelo n\u00famero de registros acessados n\u00e3o corresponde ao valor de bytes informado no plano (1360), para obter esse numero o otimizador acrescentou o tamanho m\u00e9dio da coluna INDEX_TYPE que foi utilizada na opera\u00e7\u00e3o linha 3 \u00a0(34 x 40 = 1360). COST foi estimado em 6 pelo otimizador que somou\u00a0o custo da opera\u00e7\u00e3o filha (2) na linha 3 e espera encontrar esses 34 registros da tabela &#8220;MY_INDEXES&#8221; distribu\u00eddos em 4 blocos o que demandar\u00e1 4 leitura f\u00edsicas. O tempo estimado ser\u00e1 o resultado de ( 6 x sreadtime = 60ms) que arredondando ser\u00e1 1 segundo.<\/span><\/p>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:800px;\"><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 \/><\/div><\/td><td><div class=\"php codecolorer\">appuser<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> SELECT owner<span class=\"sy0\">,<\/span> table_name<span class=\"sy0\">,<\/span> column_name<span class=\"sy0\">,<\/span> avg_col_len<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM dba_tab_columns<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE owner <span class=\"sy0\">=<\/span> <span class=\"st_h\">'APPUSER'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; AND table_name <span class=\"sy0\">=<\/span> <span class=\"st_h\">'MY_INDEXES'<\/span><br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; AND column_name IN <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'TABLE_OWNER'<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'TABLE_NAME'<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'STATUS'<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'INDEX_TYPE'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nOwner &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;TABLE_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Coluna &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AVG_COL_LEN<br \/>\n<span class=\"sy0\">----------------<\/span> <span class=\"sy0\">--------------------<\/span> <span class=\"sy0\">--------------------<\/span> <span class=\"sy0\">-----------<\/span><br \/>\nAPPUSER &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MY_INDEXES &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; INDEX_TYPE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">7<\/span><br \/>\nAPPUSER &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MY_INDEXES &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TABLE_OWNER &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">9<\/span><br \/>\nAPPUSER &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MY_INDEXES &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TABLE_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">18<\/span><br \/>\nAPPUSER &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MY_INDEXES &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; STATUS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">6<\/span><br \/>\n<br \/>\n<span class=\"nu0\">4<\/span> rows selected<span class=\"sy0\">.<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<h3 style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Linha 4: INDEX FAST FULL SCAN<\/span><\/h3>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Existem 8015 registros na tabela MY_TABLES\u00a0e esta opera\u00e7\u00e3o vai ler todas as entradas\u00a0do \u00edndice MY_TABLES_IDX correspondentes a essa tabela e vai calcular o tamanho em bytes baseado no tamanho m\u00e9dio dos campos \u00a0OWNER, TABLE_NAME e TABLESPACE_NAME que s\u00e3o listados na se\u00e7\u00e3o &#8220;Column Projection Information&#8221; linha 4, nesse caso teremos (8015 x 35 \/ 1024 = 273K) que corresponde ao calculo realizado pelo otimizador no plano de execu\u00e7\u00e3o. A coluna COST apresenta o valor 15 que corresponde a estimativa de \u00a015 leituras f\u00edsicas de blocos. Novamente o resultado do arredondamento do tempo vai exibir 1 segundo na coluna TIME.\u00a0<\/span><\/p>\n<div class=\"codecolorer-container php default codecolorer-noborder\" style=\"overflow:auto;white-space:nowrap;width:800px;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 \/><\/div><\/td><td><div class=\"php codecolorer\">appuser<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> select NUM_ROWS from dba_indexes where index_name <span class=\"sy0\">=<\/span> <span class=\"st_h\">'MY_TABLES_IDX'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; NUM_ROWS<br \/>\n<span class=\"sy0\">----------<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"nu0\">8015<\/span><br \/>\n<br \/>\n<br \/>\nappuser<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> SELECT owner<span class=\"sy0\">,<\/span> table_name<span class=\"sy0\">,<\/span> column_name<span class=\"sy0\">,<\/span> avg_col_len<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;FROM dba_tab_columns<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; WHERE owner <span class=\"sy0\">=<\/span> <span class=\"st_h\">'APPUSER'<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; AND table_name <span class=\"sy0\">=<\/span> <span class=\"st_h\">'MY_TABLES'<\/span><br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; AND column_name IN <span class=\"br0\">&#40;<\/span><span class=\"st_h\">'OWNER'<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'TABLE_NAME'<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'TABLESPACE_NAME'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nOwner &nbsp; &nbsp; &nbsp;TABLE_NAME &nbsp; &nbsp; &nbsp; Coluna &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AVG_COL_LEN<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">----------------<\/span> <span class=\"sy0\">-----------------<\/span> <span class=\"sy0\">-----------<\/span><br \/>\nAPPUSER &nbsp; &nbsp;MY_TABLES &nbsp; &nbsp; &nbsp; &nbsp;OWNER &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">9<\/span><br \/>\nAPPUSER &nbsp; &nbsp;MY_TABLES &nbsp; &nbsp; &nbsp; &nbsp;TABLE_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">18<\/span><br \/>\nAPPUSER &nbsp; &nbsp;MY_TABLES &nbsp; &nbsp; &nbsp; &nbsp;TABLESPACE_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">8<\/span><br \/>\n<br \/>\nappuser<span class=\"sy0\">@<\/span>LAB11 <span class=\"sy0\">&gt;<\/span> select <span class=\"nu0\">8015<\/span><span class=\"sy0\">*<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">9<\/span><span class=\"sy0\">+<\/span><span class=\"nu0\">18<\/span><span class=\"sy0\">+<\/span><span class=\"nu0\">8<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">\/<\/span><span class=\"nu0\">1024<\/span> from dual<span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"nu0\">8015<\/span><span class=\"sy0\">*<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">9<\/span><span class=\"sy0\">+<\/span><span class=\"nu0\">18<\/span><span class=\"sy0\">+<\/span><span class=\"nu0\">8<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">\/<\/span><span class=\"nu0\">1024<\/span><br \/>\n<span class=\"sy0\">------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu19\">273.950195<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<h3 style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Linha 1: HASH JOIN<\/span><\/h3>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Esta opera\u00e7\u00e3o vai fazer a jun\u00e7\u00e3o de 34 registros da opera\u00e7\u00e3o (linha 2) com os 34 registros da opera\u00e7\u00e3o (linha 4), o c\u00e1lculo da quantidade de bytes para essa opera\u00e7\u00e3o ser\u00e1 a multiplica\u00e7\u00e3o do numero de registros (34) pela soma dos tamanhos m\u00e9dios dos campos das opera\u00e7\u00f5es filhas (linha 2 e 4) que s\u00e3o respectivamente 40 e 35 bytes, dessa forma temos { 34 x (40 + 35) = 2550 }. A coluna COST foi calculada pelo otimizador como a soma do custo da duas opera\u00e7\u00f5es filhas (6 + 15 = 21) e a coluna TIME como nas opera\u00e7\u00f5es anteriores o resultado do calculo feito pelo otimizador \u00e9 inferior a 1 segundo, logo o valor \u00e9 arredondado para 1 segundo.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Conclus\u00e3o<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Utilizamos um plano de execu\u00e7\u00e3o simples para compreender como o Otimizador faz a estimativa de cada uma das estat\u00edsticas, mas \u00e9 importante frisar que a coluna COST \u00e9 a mais importante, pois \u00e9 essa coluna que o Otimizador utiliza para escolher dentre v\u00e1rios planos o que supostamente seria o melhor, o mais r\u00e1pido. Entretanto precisamos saber que o Otimizador apresenta algumas falhas quando realiza esses c\u00e1lculos estimados, ou por que as estat\u00edsticas dos objetos n\u00e3o esta atualizada, ou esta incompleta, ou ainda por algum erro no algoritmo do Otimizador. Como consequ\u00eancia disso o Otimizador as vezes acaba escolhendo um plano de execu\u00e7\u00e3o que tem um tempo de resposta insatisfat\u00f3rio, \u00e9 nesse momento que precisamos utilizar o conhecimento de como ele trabalha para identificar o que esta causando essa anomalia e aplicar uma corre\u00e7\u00e3o para melhorar o tempo de resposta da instru\u00e7\u00e3o SQL.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Refer\u00eancias<\/span><\/h2>\n<p><a href=\"http:\/\/allthingsoracle.com\/execution-plans-part-8-cost-time-etc\/\" target=\"_blank\">http:\/\/allthingsoracle.com\/execution-plans-part-8-cost-time-etc\/<\/a><\/p>\n<p><a href=\"https:\/\/jonathanlewis.wordpress.com\/2010\/10\/05\/frequency-histogram-4\/\" target=\"_blank\">https:\/\/jonathanlewis.wordpress.com\/2010\/10\/05\/frequency-histogram-4\/<\/a><\/p>\n<p>&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\/2017\/11\/promocao2u.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;<br \/>\n&nbsp;<br \/>\n&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>No artigo anterior sobre plano de execu\u00e7\u00e3o abordamos como identificar a sequ\u00eancia de execu\u00e7\u00e3o das opera\u00e7\u00f5es, outra parte muito importante no entendimento do plano de execu\u00e7\u00e3o s\u00e3o as informa\u00e7\u00f5es estat\u00edsticas que podem ser classificadas em dois grupos: 1) As estat\u00edsticas estimadas pelo otimizador que s\u00e3o usadas no processo de parse para escolher dentre alguns planos criados, um que supostamente seria<\/p>\n","protected":false},"author":2,"featured_media":142,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35],"tags":[6,40,41,7,39,36,37,10,11,38],"class_list":["post-141","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-execution-plan","tag-cbo","tag-column-projection","tag-dba_tab_columns","tag-dbms_xplan","tag-estatisticas","tag-execution-plan","tag-ordem-de-execucao","tag-otimizador","tag-plano-de-execucao","tag-sql-tuning"],"aioseo_notices":[],"_links":{"self":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/141","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=141"}],"version-history":[{"count":26,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/141\/revisions"}],"predecessor-version":[{"id":2063,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/141\/revisions\/2063"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/media\/142"}],"wp:attachment":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/media?parent=141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/categories?post=141"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/tags?post=141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}