{"id":1830,"date":"2017-12-06T21:53:46","date_gmt":"2017-12-06T20:53:46","guid":{"rendered":"http:\/\/clemente.pamplona.name\/dba\/?p=1830"},"modified":"2017-12-22T12:39:33","modified_gmt":"2017-12-22T11:39:33","slug":"checklist-de-sqltuning-en-la-version-12c","status":"publish","type":"post","link":"http:\/\/clemente.pamplona.name\/dba\/checklist-de-sqltuning-en-la-version-12c\/","title":{"rendered":"Checklist de  SQLtuning  en la version 12c"},"content":{"rendered":"<p>Hoy vamos a seguir con peque\u00f1as notas sobre la nueva version 12c, en este caso veremos mejoras en la gestion de estadisticas y planes<\/p>\n<h1>Uso de Adaptative Execution Plans\/adaptative query optimization<\/h1>\n<p>La nueva funcionalidad de los planes de ejecicion flexibles (tambi\u00e9n llamado optimizaci\u00f3n de querys flexibles) permite que el optimizador sea capaz de ajustar los planes en tiempo de ejecuci\u00f3n y obtener informaci\u00f3n adicional que le permita obtener mejores planes de ejecuci\u00f3n.<br \/>\nEn ved de usar planes de ejecuci\u00f3n fijos esta funcionalidad permite al optimizador el posponer el plan hasta el momento de la ejecuci\u00f3n.<br \/>\nEsta funcionalidad se basa en dos m\u00e9todos:<\/p>\n<ul>\n<li><b>Adaptative plans:<\/b> Se centra en mejorar el plan del optimizador en runtime<\/li>\n<li><b>Adaptative statistics:<\/b> Se centra en obtener estad\u00edsticas adicionales para mejorar las siguientes ejecuciones de una consulta<\/li>\n<\/ul>\n<h2>Adaptative plans<\/h2>\n<p>Muchas veces el optimizador falla en la cardinalidad de las consultas generando un plan deficiente ( default plan), la funcionalidad de adaptative plans ajusta el plan a las estad\u00edsticas actuales, que son mas exactas que las estad\u00edsticas iniciales que fueron obtenidas en una ejecuci\u00f3n anterior. Cuando selecciona el plan el optimizador usar\u00e1 este plan en las siguientes ejecuciones (del child cursor)<br \/>\nEsta funcionalidad depende de los dos siguientes par\u00e1metros<\/p>\n<pre>optimizer_features_enable            string  12.1.0.2\r\noptimizer_adaptive_reporting_only    boolean FALSE\r\n<\/pre>\n<p>Si ponemos el par\u00e1metro OPTIMIZER_ADAPTIVE_REPORTING_ONLY=TRUE el optimizador si que obtiene las estad\u00edsticas, pero no las usar\u00e1 (usar\u00e1 el default plan)<br \/>\nLo que hace el optimizador con esta funcionalidad es que obtiene multiples subplanes para porciones del plan para determinar en tiempo de ejecuci\u00f3n que m\u00e9todo usar. Una vez el optimizador decide un plan dejar\u00e1 de recopliar estad\u00edsticas y usar\u00e1 este plan para las siguientes ejecuciones del child cursor<br \/>\nPodemos saber cuales de las SQL han usado esta funcionalidad mediante la nueva columna de la vista v$SQL IS_RESOLVED_ADAPTIVE_PLAN que tendr\u00eda un Y<br \/>\nCuando una consulta usa el Adptative Query Optimization el plan mostrado en el EXPLAIN PLAN no tiene por que ser el que ha usado, para ver el que ha usado deber\u00edamos de usar la funci\u00f3n XDBS_XPLAN.DISPLAY_CURSOR<br \/>\nEste m\u00e9todo tambi\u00e9n es \u201cmuy \u00fatil\u201d con las ejecuciones paralelas , aqu\u00ed se usa una t\u00e9cnica llamada hybrid data distribution<\/p>\n<h2>Adaptative statistics<\/h2>\n<p>Las Adaptative statistics son usadas por el optimizador para lidiar con los predicados complejos. En la versi\u00f3n 12 el dynamic sampling ha sido renombrado como dynamic statistics y puede obtener estad\u00edsticas no solamente de una tabla sino tambi\u00e9n de joins y predicados del tipo group-by<br \/>\nEsto se gestiona mediante el par\u00e1metro OPTIMIZER_DYNAMIC_SAMPLING (modificable a nivel sesi\u00f3n),que puede tener valores entre 0 y 11<\/p>\n<table class=MsoTableMediumShading2Accent1 border=1 cellspacing=0  cellpadding=0 width=640 >\n<tr style='mso-yfti-irow:-1;mso-yfti-firstrow:yes'>\n<td valign=top style='border-top:solid windowtext 2.25pt;border-left:none;\n  border-bottom:solid windowtext 2.25pt;border-right:none;background:#4F81BD;\n  mso-background-themecolor:accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpFirst style='mso-yfti-cnfc:517'><b><span lang=EN-US>LEVEL<\/span><\/b><b\n  style='mso-bidi-font-weight:normal'><span lang=EN-US><o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border-top:solid windowtext 2.25pt;border-left:none;\n  border-bottom:solid windowtext 2.25pt;border-right:none;background:#4F81BD;\n  mso-background-themecolor:accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpMiddle style='mso-yfti-cnfc:1'><b><span lang=EN-US>WHEN<br \/>\n  DYNAMIC STATISTICS WILL BE USED<\/span><\/b><b style='mso-bidi-font-weight:\n  normal'><span lang=EN-US><o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border-top:solid windowtext 2.25pt;border-left:none;\n  border-bottom:solid windowtext 2.25pt;border-right:none;background:#4F81BD;\n  mso-background-themecolor:accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpLast style='mso-yfti-cnfc:1'><b><span lang=EN-US>SAMPLE<br \/>\n  SIZE (BLOCKS)<\/span><\/b><b style='mso-bidi-font-weight:normal'><span\n  lang=EN-US><o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<\/tr>\n<tr style='mso-yfti-irow:0'>\n<td valign=top style='border:none;background:#4F81BD;mso-background-themecolor:\n  accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpFirst style='mso-yfti-cnfc:68'><b><span lang=EN-US>0<o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border:none;background:#D8D8D8;mso-background-themecolor:\n  background1;mso-background-themeshade:216;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpMiddle style='mso-yfti-cnfc:64'><span lang=EN-US>Switches<br \/>\n  off dynamic statistics<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td valign=top style='border:none;background:#D8D8D8;mso-background-themecolor:\n  background1;mso-background-themeshade:216;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpLast style='mso-yfti-cnfc:64'><span lang=EN-US>N\/A<o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<tr style='mso-yfti-irow:1'>\n<td valign=top style='border:none;background:#4F81BD;mso-background-themecolor:\n  accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpFirst style='mso-yfti-cnfc:4'><b><span lang=EN-US>1<o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border:none;padding:0cm 5.4pt 0cm 5.4pt'>\n<p class=CONSOLACxSpMiddle><span lang=EN-US>At least one non-partitioned<br \/>\n  table in the statement has no statistics<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td valign=top style='border:none;padding:0cm 5.4pt 0cm 5.4pt'>\n<p class=CONSOLACxSpLast><span lang=EN-US>32<o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<tr style='mso-yfti-irow:2'>\n<td valign=top style='border:none;background:#4F81BD;mso-background-themecolor:\n  accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpFirst style='mso-yfti-cnfc:68'><b><span lang=EN-US>2(default)<o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border:none;background:#D8D8D8;mso-background-themecolor:\n  background1;mso-background-themeshade:216;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpMiddle style='mso-yfti-cnfc:64'><span lang=EN-US>One or<br \/>\n  more tables in the statement have no statistics<o:p><\/o:p><\/span><\/p>\n<p class=CONSOLACxSpMiddle style='mso-yfti-cnfc:64'><span lang=EN-US>This<br \/>\n  setting is suitable for the majority of systems<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td valign=top style='border:none;background:#D8D8D8;mso-background-themecolor:\n  background1;mso-background-themeshade:216;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpLast style='mso-yfti-cnfc:64'><span lang=EN-US>64<o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<tr style='mso-yfti-irow:3'>\n<td valign=top style='border:none;background:#4F81BD;mso-background-themecolor:\n  accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpFirst style='mso-yfti-cnfc:4'><b><span lang=EN-US>3<o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border:none;padding:0cm 5.4pt 0cm 5.4pt'>\n<p class=CONSOLACxSpMiddle><span lang=EN-US style='color:#252525'>Any<br \/>\n  statement that meets level 2 criteria and any statement that has one or more<br \/>\n  expressions used in the where clause predicates e.g. Where<br \/>\n  substr(CUSTLASTNAME,1,3) or Where a + b =5<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td valign=top style='border:none;padding:0cm 5.4pt 0cm 5.4pt'>\n<p class=CONSOLACxSpLast><span lang=EN-US style='color:#252525'>64<o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<tr style='mso-yfti-irow:4'>\n<td valign=top style='border:none;background:#4F81BD;mso-background-themecolor:\n  accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpFirst style='mso-yfti-cnfc:68'><b><span lang=EN-US>4<o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border:none;background:#D8D8D8;mso-background-themecolor:\n  background1;mso-background-themeshade:216;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpMiddle style='mso-yfti-cnfc:64'><span lang=EN-US\n  style='color:#252525'>Any statement that meets level 3 criteria and any<br \/>\n  statement that has complex predicates. An OR or AND operator between multiple<br \/>\n  predicates on the same table<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td valign=top style='border:none;background:#D8D8D8;mso-background-themecolor:\n  background1;mso-background-themeshade:216;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpLast style='mso-yfti-cnfc:64'><span lang=EN-US\n  style='color:#252525'>64<o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<tr style='mso-yfti-irow:5'>\n<td valign=top style='border:none;background:#4F81BD;mso-background-themecolor:\n  accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpFirst style='mso-yfti-cnfc:4'><b><span lang=EN-US>5<o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border:none;padding:0cm 5.4pt 0cm 5.4pt'>\n<p class=CONSOLACxSpMiddle><span lang=EN-US style='color:#252525'>Any<br \/>\n  statement that meets level 4 criteria<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td valign=top style='border:none;padding:0cm 5.4pt 0cm 5.4pt'>\n<p class=CONSOLACxSpLast><span lang=EN-US style='color:#252525'>128<o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<tr style='mso-yfti-irow:6'>\n<td valign=top style='border:none;background:#4F81BD;mso-background-themecolor:\n  accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpFirst style='mso-yfti-cnfc:68'><b><span lang=EN-US>6<o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border:none;background:#D8D8D8;mso-background-themecolor:\n  background1;mso-background-themeshade:216;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpMiddle style='mso-yfti-cnfc:64'><span lang=EN-US\n  style='color:#252525'>Any statement that meets level 4 criteria<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td valign=top style='border:none;background:#D8D8D8;mso-background-themecolor:\n  background1;mso-background-themeshade:216;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpLast style='mso-yfti-cnfc:64'><span lang=EN-US\n  style='color:#252525'>256<o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<tr style='mso-yfti-irow:7'>\n<td valign=top style='border:none;background:#4F81BD;mso-background-themecolor:\n  accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpFirst style='mso-yfti-cnfc:4'><b><span lang=EN-US>7<o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border:none;padding:0cm 5.4pt 0cm 5.4pt'>\n<p class=CONSOLACxSpMiddle><span lang=EN-US style='color:#252525'>Any<br \/>\n  statement that meets level 4 criteria<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td valign=top style='border:none;padding:0cm 5.4pt 0cm 5.4pt'>\n<p class=CONSOLACxSpLast><span lang=EN-US style='color:#252525'>512<o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<tr style='mso-yfti-irow:8'>\n<td valign=top style='border:none;background:#4F81BD;mso-background-themecolor:\n  accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpFirst style='mso-yfti-cnfc:68'><b><span lang=EN-US>8<o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border:none;background:#D8D8D8;mso-background-themecolor:\n  background1;mso-background-themeshade:216;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpMiddle style='mso-yfti-cnfc:64'><span lang=EN-US\n  style='color:#252525'>Any statement that meets level 4 criteria<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td valign=top style='border:none;background:#D8D8D8;mso-background-themecolor:\n  background1;mso-background-themeshade:216;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpLast style='mso-yfti-cnfc:64'><span lang=EN-US\n  style='color:#252525'>1024<o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<tr style='mso-yfti-irow:9'>\n<td valign=top style='border:none;background:#4F81BD;mso-background-themecolor:\n  accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpFirst style='mso-yfti-cnfc:4'><b><span lang=EN-US>9<o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border:none;padding:0cm 5.4pt 0cm 5.4pt'>\n<p class=CONSOLACxSpMiddle><span lang=EN-US style='color:#252525'>Any<br \/>\n  statement that meets level 4 criteria<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td valign=top style='border:none;padding:0cm 5.4pt 0cm 5.4pt'>\n<p class=CONSOLACxSpLast><span lang=EN-US style='color:#252525'>4086<o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<tr style='mso-yfti-irow:10'>\n<td valign=top style='border:none;background:#4F81BD;mso-background-themecolor:\n  accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpFirst style='mso-yfti-cnfc:68'><b><span lang=EN-US>10<o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border:none;background:#D8D8D8;mso-background-themecolor:\n  background1;mso-background-themeshade:216;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpMiddle style='mso-yfti-cnfc:64'><span lang=EN-US\n  style='color:#252525'>All statements<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td valign=top style='border:none;background:#D8D8D8;mso-background-themecolor:\n  background1;mso-background-themeshade:216;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpLast style='mso-yfti-cnfc:64'><span lang=EN-US\n  style='color:#252525'>All Blocks<o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<tr style='mso-yfti-irow:11;mso-yfti-lastrow:yes'>\n<td valign=top style='border:none;border-bottom:solid windowtext 2.25pt;\n  background:#4F81BD;mso-background-themecolor:accent1;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpFirst style='mso-yfti-cnfc:4'><b><span lang=EN-US>11<o:p><\/o:p><\/span><\/b><\/p>\n<\/td>\n<td valign=top style='border:none;border-bottom:solid windowtext 2.25pt;\n  padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpMiddle><span lang=EN-US style='color:#252525'>The<br \/>\n  database determines automatically if dynamic statistics are required<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td valign=top style='border:none;border-bottom:solid windowtext 2.25pt;\n  padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=CONSOLACxSpLast><span lang=EN-US style='color:#252525'>Automatically<br \/>\n  determined<o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<\/table>\n<h2>AUTOMATIC REOPTIMIZATION<\/h2>\n<p>Muchas veces los Apdaptative plans no son posibles(queryes con joins ineficientes ..), en esos casos el optimizador opta por esta funcionalidad que es el automatic reoptimization, donde el optimizador cambia el plan para las siguientes ejecuciones.<br \/>\nEl optimizador usa estos dos m\u00e9todos<\/p>\n<h3>Statistics feedback<\/h3>\n<p>Tambi\u00e9n llamado cardinality feedback , lo que hace el planificador en este caso es mejorar los planes en los que encuentra cardinalediades err\u00f3neas , cuando se usa eeste m\u00e9todo el optimizador compara las estad\u00edsticas que tiene con las cardinalidades observadas durante la ejecuci\u00f3n, en caso de que difieran significativamente el optimizador hace dos cosas:<br \/>\n1- Guarda la cardinalidad nueva en las estad\u00edsticas<br \/>\n2- Crea un SQLplan mejor para las siguientes ejecuciones de esta consilta<br \/>\nPerformance feedback<br \/>\nEsta funcionalidad neceita tener el par\u00e1metro PARALLEL_DEGREE_POLICY=ADAPTATIVE<br \/>\nEst\u00e1 mas enfocado a el grado de paralelismo, tras la ejecuci\u00f3n compara el grado de paralelismo elegido por el optimizador con el grado de paralelismo,si los dos var\u00edan significativamente, el optimizador lo marcar\u00e1 para reoptimizacion y guardar\u00e1 las estad\u00edsticas para un mejor plan en la siguientes execuciones<\/p>\n<h1>SQL Plan directives<\/h1>\n<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0\n style='border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt;\n mso-yfti-tbllook:1184;mso-padding-alt:0cm 5.4pt 0cm 5.4pt'><\/p>\n<tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>\n<td width=364 valign=top style='width:272.8pt;border:solid windowtext 1.0pt;\n  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=MsoNormalCxSpFirst><span lang=ES-TRAD style='mso-ansi-language:ES-TRAD;\n  mso-fareast-language:ES'>SI<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td width=364 valign=top style='width:272.8pt;border:solid windowtext 1.0pt;\n  border-left:none;mso-border-left-alt:solid windowtext .5pt;mso-border-alt:\n  solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=MsoNormalCxSpMiddle><span lang=ES-TRAD style='mso-ansi-language:\n  ES-TRAD;mso-fareast-language:ES'>NO<o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<tr style='mso-yfti-irow:1;mso-yfti-lastrow:yes'>\n<td width=364 valign=top style='width:272.8pt;border:solid windowtext 1.0pt;\n  border-top:none;mso-border-top-alt:solid windowtext .5pt;mso-border-alt:solid windowtext .5pt;\n  padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=MsoNormalCxSpMiddle><span lang=ES-TRAD style='mso-ansi-language:\n  ES-TRAD;mso-fareast-language:ES'>Creados en shared pool y bajados a sysaux<o:p><\/o:p><\/span><\/p>\n<p class=MsoNormalCxSpMiddle><span lang=ES-TRAD style='mso-ansi-language:\n  ES-TRAD;mso-fareast-language:ES'>Creados para SQL con cardinalidad incorrecta<o:p><\/o:p><\/span><\/p>\n<\/td>\n<td width=364 valign=top style='width:272.8pt;border-top:none;border-left:\n  none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;\n  mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;\n  mso-border-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'><\/p>\n<p class=MsoNormalCxSpMiddle><b style='mso-bidi-font-weight:normal'><span\n  lang=ES-TRAD style='mso-ansi-language:ES-TRAD;mso-fareast-language:ES'>NO <\/span><\/b><span\n  lang=ES-TRAD style='mso-ansi-language:ES-TRAD;mso-fareast-language:ES'>Gestionados<br \/>\n  por el optimizador (solo usados por)<o:p><\/o:p><\/span><\/p>\n<p class=MsoNormalCxSpMiddle><b style='mso-bidi-font-weight:normal'><span\n  lang=ES-TRAD style='mso-ansi-language:ES-TRAD;mso-fareast-language:ES'>NO<\/span><\/b><span\n  lang=ES-TRAD style='mso-ansi-language:ES-TRAD;mso-fareast-language:ES'> para<br \/>\n  recopilar estad\u00edsticas de objetos que la tienen mal <o:p><\/o:p><\/span><\/p>\n<\/td>\n<\/tr>\n<\/table>\n<h1>Uso avanzado de obtencion de estadisticas <\/h1>\n<p>La versi\u00f3n 12c nos aporta  mejoras substanciales en lo que a la obtenci\u00f3n de estad\u00edsticas se refiere  <\/p>\n<ul>\n<li>Estadisticas online para bulk-load\n<li>incremental statisticas\n<li>concurrent statistics\n<li>Extended statistics (gloumn group)\n<\/ul>\n<p>La version 12c introduce una mejora im<\/p>\n<h3>Online Statistics gathering for bulk-load<\/h3>\n<p>La version 12c introduce una mejora importante en la obtenci\u00f3n de estad\u00edsticas en los procesos de carga BULK-LOAD, ahora el optimizador regoje estad\u00edsticas d manera autom\u00e1tica en procesos de carga de este tipo, esto incluye los procesos deCTAS (create table as), INSERT INTO \u2026 <\/p>\n<p>La base de datos obtendr\u00e1 las estad\u00edsticas del objeto, es decir, si se hace sobre una tabla particionada obtendr\u00e1 estad\u00edsticas a nuivel de tabla, pero no de paticion, si se hace sobre una partici\u00f3n si que obtiene estad\u00edsticas a nivel de partici\u00f3n , pero no a nivel global de la tabla.<br \/>\nLa base de datos no obtendr\u00e1 estad\u00edsticas en los casos de<br \/>\n\u2022\tEsquema SYS<br \/>\n\u2022\tEs una nested table<br \/>\n\u2022\tEs un IOT (index organized table) <\/p>\n<h3>Incremental statistics<\/h3>\n<p>Antes de la 12c cuando hab\u00eda cambios en las filas de una de lsparticiones de la tabla cambiaban todaslas estad\u00edsticas de la tabla quedaban como STALE. En la 12c tenemos u nuevo par\u00e1metro llamado INCREMENTAL_STALENESS que nos permite determinar cuando las estad\u00edsticas de las particiones deben de ser consideradas como STALE.<br \/>\nEl valor por defecto de este par\u00e1metro es NULL  (lo que hace que se comporte como en la 11g)<br \/>\nPuede tomar los valores:<br \/>\n\u2022\tUSE_STALE_PERCENT: Las estad\u00edsticas de la partici\u00f3n no ser\u00e1n consideradas STALE hasta que el n\u00famero de filas que se cambien no sea mayor del porcentaje que se indique ( 10% por defecto)<br \/>\n\u2022\tUSE_LOCKED_STATS: Si las estad\u00edsticas de la partici\u00f3n est\u00e1n bloqueadas se usar\u00e1n para generar las estad\u00edsticas globales indepeneientemente de las filas que hayan sido modificadas<br \/>\nOtra mejora en las estad\u00edsticas incrementales est\u00e1 relaccionada con el EXCHANGE PARTITION, el  Exchange partition permite meter los datos de una tabla como una partici\u00f3n de otra.<\/p>\n<h3>Concurrent statistics<\/h3>\n<p>Ahora es posible obtener estad\u00edsticas de la tabla y de los \u00edndices de manera concurrente,se puede configurar incluso que tablas particionadas quieres que usen est\u00e9 m\u00e9todo y cual no.<br \/>\nPara poder usar esta funcionalidad es necesario<br \/>\n\u2022\tJOB_QUEUE_PROCESSES debe de ser mayor de 4<br \/>\n\u2022\tTener el resource manager habilitado<\/p>\n<p>Esta funcionalidad usa la propiedad CONCURRENT del paquete DBMS_STATS  en las prefrencias globales.  Este puede tener 3 valoers<br \/>\n\u2022\tMANUAL.concurrencia habilitada solo para las ejecuciones manuales<br \/>\n\u2022\tAUTOMATIC: Concurrencia habilitado solo apra las autom\u00e1ticas<br \/>\n\u2022\tALL: habilitado para todas <\/p>\n<p>El valor por defecto es OFF <\/p>\n<pre>\r\nSELECT DBMS_STATS.GET_PREFS('CONCURRENT') FROM DUAL;\r\nOFF\r\n<\/pre>\n<h3>Extended statistics\/column group<\/h3>\n<p>La idea de esta funcionalidad es la de obtener estad\u00edsticas en casos en que los predicados son complejos. Ahora se pueden hacer dos tipos mas de estad\u00edsticas:<br \/>\n\u2022\tColumn group statistics: Estadistias sobre grupos de columnas<br \/>\n\u2022\tExpression statistics: Estadisticas sobre columnas que son parte de un Where <\/p>\n<p>El proceso para obtener este tipo de estadistiacas es:<br \/>\n1-Habilitar la monitorizaci\u00f3n de la carga, para esto se usa el paquete SEED_COL_USAGE del DBMS_STATS<br \/>\nexec DBMS_STATS.SEED_COL_USAGE(null,null,600)<br \/>\n2-Ejecutas la carga de trabajo<br \/>\n3-Revisas el uso de las columnas  con DBMS_STATS.REPORT_COL_USAGE<br \/>\nSelect DBMS_STATS.REPORT_COL_USAGE(\u2018ESQUEMA\u2019,\u2019TABLA\u2019) from dual<br \/>\n4-creas las estadisticas grupales que consideres con DBMS_STATS.CREATE_EXTENDED_STATS<br \/>\nSelect DBMS_STATS.CREATE_EXTENDED_STATS(\u2018ESQUEMA\u2019,\u2019TABLA\u2019) from dual<\/p>\n<h1>Uso de Adaptive SQL Plan Management  (SPM)<\/h1>\n<p>El SPM  es el mecanismo que tiene oracle dede  la 11c para evitar que los planes de ejecuci\u00f3n se degraden, el SPM captura los SQLplans, verifica su rendimiento y en caso de ser mejorables los evoluciona.<\/p>\n<p>El optimizador solamente utiliza los \u201cknow plans\u201d, si fijamos a TRUE el par\u00e1metro OPTIMIZER_CAPTURE_SQLPLAN_BASELINES, entonces capturar\u00e1 los planes, pero seguir\u00e1 usando solo los conocidos. El trabajo nocturno DBMS_SPM.EVOLVE_SQL_PLAN_BASELINES\t comprueba los planes con carga mas alta y mira a ver si hay un plan mejor, para que , de manera manual el DBA lo evolucione y se use ese plan.<br \/>\nEste conjunto de planes conocidos es lo que llamamos una BASELINE<br \/>\nEsto forma parte del TUNNING PACK<br \/>\nSPM consiste en tres componentes<br \/>\n1-SQLPLAN baseline capture<br \/>\n2-SQLPLAN baseline selection<br \/>\n3-SQLPLAN baseline evolution<\/p>\n<p>En la 12c  Oracle ofrece el SPM Evolve Advisor que evoluciona los planes recientemente a\u00f1adidos sn necesidad de que el DBA <\/p>\n<p>Normalmente los pasos son:<br \/>\n\u2022\tCreate an evolve task<br \/>\n\u2022\t(optionally) set evolve tas parameters<br \/>\n\u2022\tExecute the evolve task<br \/>\n\u2022\tImplement the recoomendatios in the task<br \/>\n\u2022\tReport the task outcome <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hoy vamos a seguir con peque\u00f1as notas sobre la nueva version 12c, en este caso veremos mejoras en la gestion de estadisticas y planes Uso de Adaptative Execution Plans\/adaptative query optimization La nueva funcionalidad de los planes de ejecicion flexibles &hellip; <a href=\"http:\/\/clemente.pamplona.name\/dba\/checklist-de-sqltuning-en-la-version-12c\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[60,9],"tags":[849,845,843,847],"class_list":["post-1830","post","type-post","status-publish","format-standard","hentry","category-12c","category-dummie","tag-optimizer_adaptive_reporting_only","tag-optimizer_dynamic_sampling","tag-optimizer_features_enable","tag-planifiador"],"_links":{"self":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1830","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/comments?post=1830"}],"version-history":[{"count":7,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1830\/revisions"}],"predecessor-version":[{"id":1837,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1830\/revisions\/1837"}],"wp:attachment":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/media?parent=1830"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/categories?post=1830"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/tags?post=1830"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}