Oracle Live

02/04/2016

Dynamic Sampling

Filed under: Database,Estadisticas,New 12c — mogukiller @ 1:38 am

Version: 12c

Dynamic Sampling: Lo utiliza el optimizador cuando no tiene informacion suficiente para obtener un plan de ejecucion optimo. El DS se utiliza durante la fase de hard parsing’
alter session set optimizer_dynamic_sampling=[0..11];
Con un valor de 11 haria el dynamic sampling de todas las sqls.

-- Creamos el entorno Tabla 110K valor 1 cardinalidad baja.
-- Borramos las estadisticas 
exec DBMS_STATS.DELETE_TABLE_STATS(ownname=>'MOGU',tabname=>'CF_TABLE',cascade_indexes=>TRUE);

-- Deshabilitamos dynamic_sampling:
alter session set optimizer_dynamic_sampling=0;

SET AUTOTRACE TRACEONLY EXPLAIN 
SQL>SELECT COUNT(*) FROM CF_TABLE WHERE ID_VALOR=1 AND VALOR LIKE 'A%';
/*
Execution Plan
----------------------------------------------------------
Plan hash value: 3765936269

---------------------------------------------------------------------------------------------
| Id  | Operation                    | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |              |     1 |  2015 |     5   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE              |              |     1 |  2015 |            |          |
|*  2 |   TABLE ACCESS BY INDEX ROWID| CF_TABLE     |    25 | 50375 |     5   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | IDX_ID_VALOR |   200 |       |     1   (0)| 00:00:01 |	<<<<< Sin estadisticas tira del indice aunque el valor sea poco selectivo.
---------------------------------------------------------------------------------------------
*/

-- Habilitamos dynamic_sampling
alter system flush shared_pool;
alter session set optimizer_dynamic_sampling=4;

SQL>SELECT COUNT(*) FROM CF_TABLE WHERE ID_VALOR=1 AND VALOR LIKE 'A%';
/*
Execution Plan
----------------------------------------------------------
Plan hash value: 1324324342

-------------------------------------------------------------------------------
| Id  | Operation          | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |          |     1 |  2015 |   150   (2)| 00:00:02 |
|   1 |  SORT AGGREGATE    |          |     1 |  2015 |            |          |
|*  2 |   TABLE ACCESS FULL| CF_TABLE |  1816 |  3573K|   150   (2)| 00:00:02 |		<<< Coge el plan de ejecucion bueno para el valor poco selectivo	
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("ID_VALOR"=1 AND "VALOR" LIKE 'A%')

Note
-----
   - dynamic sampling used for this statement (level=4)	<<<< Indica que utiliza dynamic sampling
*/

-- Prueba para un valor muy selectivo.

SQL>SELECT COUNT(*) FROM CF_TABLE WHERE ID_VALOR=10 AND VALOR LIKE 'A%';
/*
Execution Plan
----------------------------------------------------------
Plan hash value: 3765936269

---------------------------------------------------------------------------------------------
| Id  | Operation                    | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |              |     1 |  2015 |     3   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE              |              |     1 |  2015 |            |          |
|*  2 |   TABLE ACCESS BY INDEX ROWID| CF_TABLE     |    56 |   110K|     3   (0)| 00:00:01 |
|*  3 |    INDEX RANGE SCAN          | IDX_ID_VALOR |    14 |       |     1   (0)| 00:00:01 |	<<<< Coge el plan de mejor coste
---------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("VALOR" LIKE 'A%')
   3 - access("ID_VALOR"=10)

Note
-----
   - dynamic sampling used for this statement (level=4)
*/

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Crea un blog o un sitio web gratuitos con WordPress.com.

A %d blogueros les gusta esto: