{"id":711,"date":"2016-05-09T22:08:58","date_gmt":"2016-05-10T01:08:58","guid":{"rendered":"http:\/\/dbtimewizard.com.br\/blog\/?p=711"},"modified":"2019-11-11T18:57:30","modified_gmt":"2019-11-11T21:57:30","slug":"o-otimizador-do-oracle-precisa-da-nossa-ajuda","status":"publish","type":"post","link":"http:\/\/dbtimewizard.com.br\/blog\/o-otimizador-do-oracle-precisa-da-nossa-ajuda\/","title":{"rendered":"O Otimizador do Oracle precisa da nossa ajuda?"},"content":{"rendered":"<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">As estat\u00edsticas sobre os dados de uma tabela s\u00e3o fundamentais para o Otimizador escolher qual a maneira mais eficiente de acessar esses dados, mas existem informa\u00e7\u00f5es sobre os dados que n\u00e3o s\u00e3o coletadas de forma autom\u00e1tica e portanto n\u00e3o est\u00e3o dispon\u00edveis para o Otimizador sem que haja uma interven\u00e7\u00e3o manual, o que causa em algumas situa\u00e7\u00f5es a escolha de planos de execu\u00e7\u00e3o ineficientes. Respondendo a quest\u00e3o proposta no titulo desse artigo: sim, em algumas situa\u00e7\u00f5es especificas precisamos ajudar o Otimizador, coletando estat\u00edsticas adicionais.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Neste artigo vamos abordar as &#8220;Extended statistics&#8221;, vamos simular uma consulta onde o Otimizador n\u00e3o consegue estimar a cardinalidade da opera\u00e7\u00e3o de forma correta e como consequ\u00eancia cria um plano de execu\u00e7\u00e3o ineficiente.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Conceito &#8220;Extended statistics&#8221;<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">As &#8220;Extended statistics&#8221; foram implementadas no Banco Oracle para tratar dois tipos de situa\u00e7\u00f5es onde as estat\u00edsticas existentes n\u00e3o fornecem informa\u00e7\u00f5es suficientes para o Otimizador fazer uma boa estimativa da cardinalidade:<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">1. Quando existem m\u00faltiplos predicados em diferentes colunas na clausula WHERE de uma instru\u00e7\u00e3o SQL para uma tabela e existe algum tipo de rela\u00e7\u00e3o entre essas colunas, por exemplo quando temos uma tabela de ve\u00edculos automotores e nela temos duas colunas: Nome do veiculo e Fabricante. Nesse caso existe uma rela\u00e7\u00e3o entre essas duas colunas pois os registros existentes na tabela de um determinado veiculo s\u00f3 podem ser de um determinado fabricante. (Ex: Uno\/Fiat, HB20\/Hyndai, Fiesta\/Ford,etc..)<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">2. Quando um predicado utiliza uma express\u00e3o, por exemplo uma fun\u00e7\u00e3o do Oracle ou uma fun\u00e7\u00e3o criada pelo usu\u00e1rio.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Simula\u00e7\u00e3o &#8220;Extended statistics&#8221;<\/span><\/h2>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">A seguir vamos simular a consulta de uma tabela onde duas colunas possuem um relacionamento e em fun\u00e7\u00e3o disso as estat\u00edsticas tradicionais n\u00e3o s\u00e3o capazes de fornecer as informa\u00e7\u00f5es necess\u00e1rias para o Otimizador fazer uma boa estimativa da cardinalidade da opera\u00e7\u00e3o, na sequ\u00eancia vamos criar as &#8220;Extended statistics&#8221; e verificar que com esse tipo de informa\u00e7\u00f5es o Otimizador vai melhorar significativamente a estimativa da cardinalidade e como consequ\u00eancia melhorar o plano de execu\u00e7\u00e3o.<\/span><\/p>\n<h3 style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Cria\u00e7\u00e3o da tabela<\/span><\/h3>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Primeiro vamos criar a tabela que utilizaremos na consulta da nossa simula\u00e7\u00e3o e popular com dados que tenham alguma rela\u00e7\u00e3o entre duas colunas:<\/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 \/>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 \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<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 dbtw01 <span class=\"br0\">&#40;<\/span>id number<span class=\"sy0\">,<\/span> code1k number<span class=\"sy0\">,<\/span> code100 number<span class=\"sy0\">,<\/span> text varchar<span class=\"br0\">&#40;<\/span><span class=\"nu0\">40<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nTable created<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> <span class=\"kw2\">DECLARE<\/span><br \/>\n&nbsp; <span class=\"nu0\">2<\/span><br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; &nbsp; v_id &nbsp; &nbsp; NUMBER <span class=\"sy0\">:=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; var_x &nbsp; &nbsp;NUMBER <span class=\"sy0\">:=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"nu0\">5<\/span> &nbsp; &nbsp; l_num &nbsp; &nbsp;number<span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"nu0\">6<\/span><br \/>\n&nbsp; <span class=\"nu0\">7<\/span> &nbsp;BEGIN<br \/>\n&nbsp; <span class=\"nu0\">8<\/span><br \/>\n&nbsp; <span class=\"nu0\">9<\/span> &nbsp; &nbsp; <span class=\"kw1\">FOR<\/span> var1 IN <span class=\"nu0\">1<\/span><span class=\"sy0\">..<\/span><span class=\"nu0\">100<\/span><br \/>\n&nbsp;<span class=\"nu0\">10<\/span> &nbsp; &nbsp; LOOP<br \/>\n&nbsp;<span class=\"nu0\">11<\/span> &nbsp; &nbsp; &nbsp; &nbsp;var_x <span class=\"sy0\">:=<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">12<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"kw1\">FOR<\/span> var2 IN <span class=\"nu0\">1<\/span><span class=\"sy0\">..<\/span><span class=\"nu0\">2<\/span><br \/>\n&nbsp;<span class=\"nu0\">13<\/span> &nbsp; &nbsp; &nbsp; &nbsp;LOOP<br \/>\n&nbsp;<span class=\"nu0\">14<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l_num <span class=\"sy0\">:=<\/span> <a href=\"http:\/\/www.php.net\/round\"><span class=\"kw3\">round<\/span><\/a><span class=\"br0\">&#40;<\/span>dbms_random<span class=\"sy0\">.<\/span>value<span class=\"br0\">&#40;<\/span><span class=\"nu0\">100<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">15<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; insert into dbtw01 values<span class=\"br0\">&#40;<\/span>v_id<span class=\"sy0\">,<\/span> var_x<span class=\"sy0\">,<\/span> l_num<span class=\"sy0\">,<\/span> <span class=\"st_h\">'DBTimeWizard - Performance and Tuning'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">16<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_id <span class=\"sy0\">:=<\/span> v_id <span class=\"sy0\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">17<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<a href=\"http:\/\/www.php.net\/end\"><span class=\"kw3\">END<\/span><\/a> LOOP<span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">18<\/span> &nbsp; &nbsp; &nbsp; &nbsp;var_x <span class=\"sy0\">:=<\/span> <span class=\"nu0\">4<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">19<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"kw1\">FOR<\/span> var2 IN <span class=\"nu0\">1<\/span><span class=\"sy0\">..<\/span><span class=\"nu0\">8<\/span><br \/>\n&nbsp;<span class=\"nu0\">20<\/span> &nbsp; &nbsp; &nbsp; &nbsp;LOOP<br \/>\n&nbsp;<span class=\"nu0\">21<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l_num <span class=\"sy0\">:=<\/span> <a href=\"http:\/\/www.php.net\/round\"><span class=\"kw3\">round<\/span><\/a><span class=\"br0\">&#40;<\/span>dbms_random<span class=\"sy0\">.<\/span>value<span class=\"br0\">&#40;<\/span><span class=\"nu0\">100<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">22<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; insert into dbtw01 values<span class=\"br0\">&#40;<\/span>v_id<span class=\"sy0\">,<\/span> var_x<span class=\"sy0\">,<\/span> l_num<span class=\"sy0\">,<\/span> <span class=\"st_h\">'DBTimeWizard - Performance and Tuning'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">23<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_id <span class=\"sy0\">:=<\/span> v_id <span class=\"sy0\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">24<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<a href=\"http:\/\/www.php.net\/end\"><span class=\"kw3\">END<\/span><\/a> LOOP<span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">25<\/span> &nbsp; &nbsp; &nbsp; &nbsp;var_x <span class=\"sy0\">:=<\/span> <span class=\"nu0\">7<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">26<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"kw1\">FOR<\/span> var2 IN <span class=\"nu0\">1<\/span><span class=\"sy0\">..<\/span><span class=\"nu0\">50<\/span><br \/>\n&nbsp;<span class=\"nu0\">27<\/span> &nbsp; &nbsp; &nbsp; &nbsp;LOOP<br \/>\n&nbsp;<span class=\"nu0\">28<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l_num <span class=\"sy0\">:=<\/span> <a href=\"http:\/\/www.php.net\/round\"><span class=\"kw3\">round<\/span><\/a><span class=\"br0\">&#40;<\/span>dbms_random<span class=\"sy0\">.<\/span>value<span class=\"br0\">&#40;<\/span><span class=\"nu0\">100<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">29<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; insert into dbtw01 values<span class=\"br0\">&#40;<\/span>v_id<span class=\"sy0\">,<\/span> var_x<span class=\"sy0\">,<\/span> l_num<span class=\"sy0\">,<\/span> <span class=\"st_h\">'DBTimeWizard - Performance and Tuning'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">30<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_id <span class=\"sy0\">:=<\/span> v_id <span class=\"sy0\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">31<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<a href=\"http:\/\/www.php.net\/end\"><span class=\"kw3\">END<\/span><\/a> LOOP<span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">32<\/span> &nbsp; &nbsp; &nbsp; &nbsp;var_x <span class=\"sy0\">:=<\/span> <span class=\"nu0\">11<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">33<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"kw1\">FOR<\/span> var2 IN <span class=\"nu0\">1<\/span><span class=\"sy0\">..<\/span><span class=\"nu0\">150<\/span><br \/>\n&nbsp;<span class=\"nu0\">34<\/span> &nbsp; &nbsp; &nbsp; &nbsp;LOOP<br \/>\n&nbsp;<span class=\"nu0\">35<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l_num <span class=\"sy0\">:=<\/span> <a href=\"http:\/\/www.php.net\/round\"><span class=\"kw3\">round<\/span><\/a><span class=\"br0\">&#40;<\/span>dbms_random<span class=\"sy0\">.<\/span>value<span class=\"br0\">&#40;<\/span><span class=\"nu0\">100<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">36<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; insert into dbtw01 values<span class=\"br0\">&#40;<\/span>v_id<span class=\"sy0\">,<\/span> var_x<span class=\"sy0\">,<\/span> l_num<span class=\"sy0\">,<\/span> <span class=\"st_h\">'DBTimeWizard - Performance and Tuning'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">37<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_id <span class=\"sy0\">:=<\/span> v_id <span class=\"sy0\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">38<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<a href=\"http:\/\/www.php.net\/end\"><span class=\"kw3\">END<\/span><\/a> LOOP<span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">39<\/span> &nbsp; &nbsp; &nbsp; &nbsp;var_x <span class=\"sy0\">:=<\/span> <span class=\"nu0\">13<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">40<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"kw1\">FOR<\/span> var2 IN <span class=\"nu0\">1<\/span><span class=\"sy0\">..<\/span><span class=\"nu0\">300<\/span><br \/>\n&nbsp;<span class=\"nu0\">41<\/span> &nbsp; &nbsp; &nbsp; &nbsp;LOOP<br \/>\n&nbsp;<span class=\"nu0\">42<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l_num <span class=\"sy0\">:=<\/span> <a href=\"http:\/\/www.php.net\/round\"><span class=\"kw3\">round<\/span><\/a><span class=\"br0\">&#40;<\/span>dbms_random<span class=\"sy0\">.<\/span>value<span class=\"br0\">&#40;<\/span><span class=\"nu0\">100<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">+<\/span>var_x<span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">43<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; insert into dbtw01 values<span class=\"br0\">&#40;<\/span>v_id<span class=\"sy0\">,<\/span> var_x<span class=\"sy0\">,<\/span> l_num<span class=\"sy0\">,<\/span> <span class=\"st_h\">'DBTimeWizard - Performance and Tuning'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">44<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_id <span class=\"sy0\">:=<\/span> v_id <span class=\"sy0\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">45<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<a href=\"http:\/\/www.php.net\/end\"><span class=\"kw3\">END<\/span><\/a> LOOP<span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">46<\/span> &nbsp; &nbsp; &nbsp; &nbsp;var_x <span class=\"sy0\">:=<\/span> <span class=\"nu0\">17<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">47<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"kw1\">FOR<\/span> var2 IN <span class=\"nu0\">1<\/span><span class=\"sy0\">..<\/span><span class=\"nu0\">490<\/span><br \/>\n&nbsp;<span class=\"nu0\">48<\/span> &nbsp; &nbsp; &nbsp; &nbsp;LOOP<br \/>\n&nbsp;<span class=\"nu0\">49<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l_num <span class=\"sy0\">:=<\/span> <a href=\"http:\/\/www.php.net\/round\"><span class=\"kw3\">round<\/span><\/a><span class=\"br0\">&#40;<\/span>dbms_random<span class=\"sy0\">.<\/span>value<span class=\"br0\">&#40;<\/span><span class=\"nu0\">100<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">50<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; insert into dbtw01 values<span class=\"br0\">&#40;<\/span>v_id<span class=\"sy0\">,<\/span> var_x<span class=\"sy0\">,<\/span> l_num<span class=\"sy0\">,<\/span> <span class=\"st_h\">'DBTimeWizard - Performance and Tuning'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">51<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_id <span class=\"sy0\">:=<\/span> v_id <span class=\"sy0\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">52<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<a href=\"http:\/\/www.php.net\/end\"><span class=\"kw3\">END<\/span><\/a> LOOP<span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">53<\/span> &nbsp; &nbsp; &nbsp; &nbsp;var_x <span class=\"sy0\">:=<\/span> <span class=\"nu0\">19<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">54<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"kw1\">FOR<\/span> var2 IN <span class=\"nu0\">1<\/span><span class=\"sy0\">..<\/span><span class=\"nu0\">200<\/span><br \/>\n&nbsp;<span class=\"nu0\">55<\/span> &nbsp; &nbsp; &nbsp; &nbsp;LOOP<br \/>\n&nbsp;<span class=\"nu0\">56<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; insert into dbtw01 values<span class=\"br0\">&#40;<\/span>v_id<span class=\"sy0\">,<\/span> var_x<span class=\"sy0\">,<\/span> <span class=\"nu0\">35<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'DBTimeWizard - Performance and Tuning'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">57<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; v_id <span class=\"sy0\">:=<\/span> v_id <span class=\"sy0\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">58<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<a href=\"http:\/\/www.php.net\/end\"><span class=\"kw3\">END<\/span><\/a> LOOP<span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">59<\/span> &nbsp; &nbsp; &nbsp; &nbsp;COMMIT<span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">60<\/span> &nbsp; &nbsp; <a href=\"http:\/\/www.php.net\/end\"><span class=\"kw3\">END<\/span><\/a> LOOP<span class=\"sy0\">;<\/span><br \/>\n&nbsp;<span class=\"nu0\">61<\/span><br \/>\n&nbsp;<span class=\"nu0\">62<\/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\">63<\/span> &nbsp;<span class=\"sy0\">\/<\/span><br \/>\n<br \/>\nPL<span class=\"sy0\">\/<\/span>SQL procedure successfully completed<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> create index dbtw01_idx on dbtw01<span class=\"br0\">&#40;<\/span>code100<span class=\"sy0\">,<\/span> code1k<span class=\"br0\">&#41;<\/span> compress <span class=\"nu0\">2<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nIndex created<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>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\">'DBTW01'<\/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 SKEWONLY'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nPL<span class=\"sy0\">\/<\/span>SQL procedure successfully completed<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=\"sy0\">,<\/span> num_distinct<span class=\"sy0\">,<\/span> histogram from dba_tab_col_statistics where table_name<span class=\"sy0\">=<\/span><span class=\"st_h\">'DBTW01'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nCOLUMN_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NUM_DISTINCT HISTOGRAM<br \/>\n<span class=\"sy0\">------------------------------<\/span> <span class=\"sy0\">------------<\/span> <span class=\"sy0\">---------------<\/span><br \/>\nTEXT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> FREQUENCY<br \/>\nCODE100 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">114<\/span> FREQUENCY<br \/>\nCODE1K &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">7<\/span> FREQUENCY<br \/>\nID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">120000<\/span> NONE<br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>&nbsp;<\/p>\n<h3 style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Execu\u00e7\u00e3o da consulta<\/span><\/h3>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Agora vamos executar uma consulta que vai acessar a tabela criada na etapa anterior:<\/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 \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> ALTER SESSION SET statistics_level<span class=\"sy0\">=<\/span>ALL<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nSession altered<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> select <span class=\"coMULTI\">\/* dbtw101 *\/<\/span> id<span class=\"sy0\">,<\/span> code1k<span class=\"sy0\">,<\/span> code100<span class=\"sy0\">,<\/span> text<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;from dbtw01<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; where code1k<span class=\"sy0\">=<\/span><span class=\"nu0\">17<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; and code100<span class=\"sy0\">=<\/span><span class=\"nu0\">35<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; ID &nbsp; &nbsp; CODE1K &nbsp; &nbsp;CODE100 TEXT<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">----------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">598<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">17<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">35<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">527<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">17<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">35<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">539<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">17<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">35<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n<span class=\"sy0\">..............<\/span><br \/>\n&nbsp; &nbsp; <span class=\"nu0\">119364<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">17<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">35<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n<br \/>\n<span class=\"nu0\">485<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<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\">'%dbtw101%'<\/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 \/>\n9sscfjtmkf8q2 &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> 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\">'typical iostats 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;9sscfjtmkf8q2<span class=\"sy0\">,<\/span> child number <span class=\"nu0\">0<\/span><br \/>\n<span class=\"sy0\">-------------------------------------<\/span><br \/>\nselect <span class=\"coMULTI\">\/* dbtw101 *\/<\/span> id<span class=\"sy0\">,<\/span> code1k<span class=\"sy0\">,<\/span> code100<span class=\"sy0\">,<\/span> text &nbsp; from dbtw01 &nbsp;where<br \/>\ncode1k<span class=\"sy0\">=:<\/span><span class=\"st0\">&quot;SYS_B_0&quot;<\/span> &nbsp; &nbsp;and code100<span class=\"sy0\">=:<\/span><span class=\"st0\">&quot;SYS_B_1&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\">658621498<\/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; <span class=\"sy0\">|<\/span> Starts <span class=\"sy0\">|<\/span> E<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span>E<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> E<span class=\"sy0\">-<\/span><a href=\"http:\/\/www.php.net\/time\"><span class=\"kw3\">Time<\/span><\/a> &nbsp; <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=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">273<\/span> <span class=\"br0\">&#40;<\/span><span class=\"nu0\">100<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">485<\/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; <span class=\"nu0\">980<\/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> DBTW01 <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">8486<\/span> <span class=\"sy0\">|<\/span> &nbsp; 406K<span class=\"sy0\">|<\/span> &nbsp; <span class=\"nu0\">273<\/span> &nbsp; <span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/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\">04<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">485<\/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; <span class=\"nu0\">980<\/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=\"br0\">&#40;<\/span><span class=\"st0\">&quot;CODE100&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_1 AND <span class=\"st0\">&quot;CODE1K&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_0<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">19<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">A consulta retornou 485 linhas e para tal realizou uma opera\u00e7\u00e3o &#8220;TABLE ACCESS FULL&#8221;, o Otimizador escolheu esta opera\u00e7\u00e3o pois ele estimou que teria que acessar 8.486 linhas e para essa quantidade de linhas o acesso utilizando um \u00edndice seria mais oneroso.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h3><span style=\"font-size: 12pt;\">Utilizando &#8220;Extended statistics&#8221;<\/span><\/h3>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">Agora vamos dar uma pequena ajuda ao Otimizador, para tal vamos criar as &#8220;Extended statistics&#8221; das duas colunas que est\u00e3o sendo utilizadas na clausula WHERE e executar novamente a mesma consulta:<\/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 \/>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 \/><\/div><\/td><td><div class=\"php codecolorer\">SQL <span class=\"sy0\">&gt;<\/span> SELECT DBMS_STATS<span class=\"sy0\">.<\/span>CREATE_EXTENDED_STATS<span class=\"br0\">&#40;<\/span><span class=\"kw4\">null<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'dbtw01'<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'(code1k, code100)'<\/span><span class=\"br0\">&#41;<\/span> FROM DUAL<span class=\"sy0\">;<\/span><br \/>\n<br \/>\nDBMS_STATS<span class=\"sy0\">.<\/span>CREATE_EXTENDED_STATS<span class=\"br0\">&#40;<\/span><span class=\"kw4\">NULL<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'DBTW01'<\/span><span class=\"sy0\">,<\/span><span class=\"st_h\">'(CODE1K,CODE100)'<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<span class=\"sy0\">---------------------------------------------------------------------------------------------------------------------------------------------------<\/span><br \/>\nSYS_STUGYIUDX9_XG<span class=\"co2\">#MKTWSLK2DJ54<br \/>\n<\/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>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\">'DBTW01'<\/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 SKEWONLY'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nPL<span class=\"sy0\">\/<\/span>SQL procedure successfully completed<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=\"sy0\">,<\/span> num_distinct<span class=\"sy0\">,<\/span> histogram from dba_tab_col_statistics where table_name<span class=\"sy0\">=<\/span><span class=\"st_h\">'DBTW01'<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\nCOLUMN_NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;NUM_DISTINCT HISTOGRAM<br \/>\n<span class=\"sy0\">------------------------------<\/span> <span class=\"sy0\">------------<\/span> <span class=\"sy0\">---------------<\/span><br \/>\nSYS_STUGYIUDX9_XG<span class=\"co2\">#MKTWSLK2DJ54 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;595 HEIGHT BALANCED<br \/>\n<\/span>TEXT &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> FREQUENCY<br \/>\nCODE100 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">114<\/span> FREQUENCY<br \/>\nCODE1K &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">7<\/span> FREQUENCY<br \/>\nID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">120000<\/span> NONE<br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><br \/>\nSQL <span class=\"sy0\">&gt;<\/span> select <span class=\"coMULTI\">\/* dbtw102 *\/<\/span> id<span class=\"sy0\">,<\/span> code1k<span class=\"sy0\">,<\/span> code100<span class=\"sy0\">,<\/span> text<br \/>\n&nbsp; <span class=\"nu0\">2<\/span> &nbsp; &nbsp;from dbtw01<br \/>\n&nbsp; <span class=\"nu0\">3<\/span> &nbsp; where code1k<span class=\"sy0\">=<\/span><span class=\"nu0\">17<\/span><br \/>\n&nbsp; <span class=\"nu0\">4<\/span> &nbsp; &nbsp; and code100<span class=\"sy0\">=<\/span><span class=\"nu0\">35<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; ID &nbsp; &nbsp; CODE1K &nbsp; &nbsp;CODE100 TEXT<br \/>\n<span class=\"sy0\">----------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">----------<\/span> <span class=\"sy0\">----------------------------------------<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">598<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">17<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">35<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">527<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">17<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">35<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp;<span class=\"nu0\">539<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">17<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">35<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n<span class=\"sy0\">..........<\/span><br \/>\n&nbsp; &nbsp; <span class=\"nu0\">119364<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">17<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">35<\/span> DBTimeWizard <span class=\"sy0\">-<\/span> Performance and Tuning<br \/>\n<br \/>\n<span class=\"nu0\">485<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<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\">'%dbtw102%'<\/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 \/>\n59v6y95ffxr2y &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> 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\">'typical iostats 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;59v6y95ffxr2y<span class=\"sy0\">,<\/span> child number <span class=\"nu0\">0<\/span><br \/>\n<span class=\"sy0\">-------------------------------------<\/span><br \/>\nselect <span class=\"coMULTI\">\/* dbtw102 *\/<\/span> id<span class=\"sy0\">,<\/span> code1k<span class=\"sy0\">,<\/span> code100<span class=\"sy0\">,<\/span> text &nbsp; from dbtw01 &nbsp;where<br \/>\ncode1k<span class=\"sy0\">=:<\/span><span class=\"st0\">&quot;SYS_B_0&quot;<\/span> &nbsp; &nbsp;and code100<span class=\"sy0\">=:<\/span><span class=\"st0\">&quot;SYS_B_1&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\">954539352<\/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; <span class=\"sy0\">|<\/span> Starts <span class=\"sy0\">|<\/span> E<span class=\"sy0\">-<\/span>Rows <span class=\"sy0\">|<\/span>E<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> E<span class=\"sy0\">-<\/span><a href=\"http:\/\/www.php.net\/time\"><span class=\"kw3\">Time<\/span><\/a> &nbsp; <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;<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=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">78<\/span> <span class=\"br0\">&#40;<\/span><span class=\"nu0\">100<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">485<\/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; <span class=\"nu0\">344<\/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> DBTW01 &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">148<\/span> <span class=\"sy0\">|<\/span> &nbsp;<span class=\"nu0\">7400<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">78<\/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> &nbsp; &nbsp;<span class=\"nu0\">485<\/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; <span class=\"nu0\">344<\/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> DBTW01_IDX <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp;<span class=\"nu0\">1<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp;<span class=\"nu0\">148<\/span> <span class=\"sy0\">|<\/span> &nbsp; &nbsp; &nbsp; <span class=\"sy0\">|<\/span> &nbsp; &nbsp; <span class=\"nu0\">1<\/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> &nbsp; &nbsp;<span class=\"nu0\">485<\/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\">35<\/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;CODE100&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_1 AND <span class=\"st0\">&quot;CODE1K&quot;<\/span><span class=\"sy0\">=:<\/span>SYS_B_0<span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span class=\"nu0\">20<\/span> rows selected<span class=\"sy0\">.<\/span><br \/>\n<br \/>\nSQL <span class=\"sy0\">&gt;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">A consulta retornou 485 linhas novamente e o Otimizador estimou que seriam 148 linhas, essa estimativa esta muito pr\u00f3xima do valor real, para essa quantidade de linhas a utiliza\u00e7\u00e3o de um \u00edndice \u00e9 mais eficiente, por esta raz\u00e3o ele utilizou o \u00edndice DBTW01_IDX.<\/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;\">Quando comparamos a quantidade de buffers acessados pelas duas consultas, podemos constatar que a segunda consulta foi mais eficiente, pois enquanto na primeira consulta foram acessados\u00a0980 buffers, na segunda a quantidade caiu para\u00a0344 buffers.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">A falha na estimativa da cardinalidade da opera\u00e7\u00e3o pelo Otimizador \u00e9 uma das principais raz\u00f5es que levam o Otimizador a criar planos de execu\u00e7\u00e3o ineficientes.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-size: 12pt;\">As &#8220;Extended statistics&#8221; podem e devem ser utilizadas sempre que o Otimizador n\u00e3o consegue fazer uma boa estimativa da cardinalidade da opera\u00e7\u00e3o, pois os predicados presentes na clausula WHERE de uma instru\u00e7\u00e3o SQL possuem algum relacionamento ou quando a instru\u00e7\u00e3o SQL utiliza fun\u00e7\u00e3o no predicado.<\/span><\/p>\n<h2 style=\"text-align: justify;\"><span style=\"font-size: 14pt;\">Refer\u00eancias<\/span><\/h2>\n<p><strong><span style=\"font-size: 12pt;\"><a href=\"https:\/\/blogs.oracle.com\/optimizer\/entry\/extended_statistics\" target=\"_blank\">https:\/\/blogs.oracle.com\/optimizer\/entry\/extended_statistics<\/a><\/span><\/strong><\/p>\n<p><strong><span style=\"font-size: 12pt;\"><a href=\"https:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e41573\/stats.htm#PFGRF94725\" target=\"_blank\">https:\/\/docs.oracle.com\/cd\/E11882_01\/server.112\/e41573\/stats.htm#PFGRF94725<\/a><\/span><\/strong><\/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\/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;<br \/>\n&nbsp;<br \/>\n&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As estat\u00edsticas sobre os dados de uma tabela s\u00e3o fundamentais para o Otimizador escolher qual a maneira mais eficiente de acessar esses dados, mas existem informa\u00e7\u00f5es sobre os dados que n\u00e3o s\u00e3o coletadas de forma autom\u00e1tica e portanto n\u00e3o est\u00e3o dispon\u00edveis para o Otimizador sem que haja uma interven\u00e7\u00e3o manual, o que causa em algumas situa\u00e7\u00f5es a escolha de planos<\/p>\n","protected":false},"author":2,"featured_media":712,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71],"tags":[129,128,6,42,127,10],"class_list":["post-711","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-estatisticas","tag-cardinalidade","tag-cardinality","tag-cbo","tag-cost-base-optimizer","tag-extended-statistics","tag-otimizador"],"aioseo_notices":[],"_links":{"self":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/711","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=711"}],"version-history":[{"count":23,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/711\/revisions"}],"predecessor-version":[{"id":2097,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/posts\/711\/revisions\/2097"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/media\/712"}],"wp:attachment":[{"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/media?parent=711"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/categories?post=711"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/dbtimewizard.com.br\/blog\/wp-json\/wp\/v2\/tags?post=711"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}