Oracle Live

02/04/2016

ESTADISTICAS – Estadisticas de una tabla

Filed under: Database — mogukiller @ 1:37 am
Tags:

Pequeño manual para gestionar las estadisticas de una entrada.

-- Proceso automatico de captura de estadisticas.
-- Estadisticas a Fixed Objects.
-- Informacion de las estadisticas de una tabla.
-- Borramos estadisticas
-- Bloqueamos las estadisticas
-- Estadisticas de una tabla


-- Proceso automatico de captura de estadisticas.

Oracle 10g: Oracle gestiona las estadisticas de forma automatica a traves del job GATHER_STATS_JOB
Oracle 11g y 12c: Con la version 11g la gestion automatica de estadisticas ser realiza mediaten un procedimiento interno GATHER_DATABASE_STATS_JOB_PROC.

El job GATHER_DATABASE_STATS_JOB_PROC pasa estadisticas a aquellas tablas que
 se hayan modificado mas de un 10% (STALE_PERFECTN)

SELECT DBMS_STATS.GET_PREFS('STALE_PERCENT','MOGU','CF_TABLE') AS STALE_PERCENT FROM DUAL;
/*
STALE_PERCENT
---------------
10
*/

Podemos cambiar ese parametro:

EXEC DBMS_STATS.SET_TABLE_PREFS('MOGU','CF_TABLE','STALE_PERCENT','5');

Oracle monitoriza las DMLs que se realizan en una tabla en la vista DBA_TAB_MODIFICATIONS.

SQL> UPDATE CF_TABLE SET ID_VALOR=1 WHERE ID_VALOR<0;
/*
54989 rows updated.
*/

Pasamos la informacion a disco.

SQL> EXEC DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;

SQL> SELECT TABLE_OWNER, TABLE_NAME, INSERTS, UPDATES, DELETES,TIMESTAMP FROM DBA_TAB_MODIFICATIONS WHERE TABLE_NAME='CF_TABLE';
/*
TABLE_OWNER                    TABLE_NAME                   INSERTS    UPDATES    DELETES TIMESTAMP
------------------------------ ------------------------- ---------- ---------- ---------- ---------
MOGU                           CF_TABLE                           0      54989          0 03-MAR-16
*/

exec print_table( 'SELECT * FROM dba_tab_statistics WHERE TABLE_NAME=''CF_TABLE''' );
/*
LAST_ANALYZED                 : 03-mar-2016 15:24:18
...
STALE_STATS                   : YES		<<<<< Se pasarán estadisticas en el siguiente ejecucion automatica.
*/

Forzamos una ejecucion automatica.

exec DBMS_AUTO_TASK_IMMEDIATE.GATHER_OPTIMIZER_STATS;

/*
LAST_ANALYZED                 : 03-mar-2016 18:18:44		<<<< Actualiza las estadisticas
..
STALE_STATS                   : NO
*/

--- Habilitamos / Deshabilitamos la gestion automatica de estadisticas

exec DBMS_AUTO_TASK_ADMIN.ENABLE( client_name => 'auto optimizer stats collection',  operation => NULL,  window_name => NULL);
exec DBMS_AUTO_TASK_ADMIN.DISABLE( client_name => 'auto optimizer stats collection',  operation => NULL,  window_name => NULL);

--- Comprobamos si esta habilitado

SELECT CLIENT_NAME, status FROM DBA_AUTOTASK_CLIENT;

/*
CLIENT_NAME                          STATUS  
------------------------------------ --------
auto optimizer stats collection      ENABLED 	<<<<< Gestion automatica de estadisticas
auto space advisor                   ENABLED 
sql tuning advisor                   ENABLED 
*/

--- Comprobamos el historico de las ejecuciones

COL client_name FOR A60
COL WINDOW_NAME FOR A30
COL WINDOW_DURATION FOR A30
SELECT client_name, window_name, TO_CHAR(WINDOW_START_TIME,'YYYY/MM/DD HH24:MI:SS') START_WINDOW,  WINDOW_DURATION,   jobs_created, jobs_started, jobs_completed
 FROM dba_autotask_client_history
 WHERE client_name like '%stats%'
 ORDER BY START_WINDOW;
 
-- Estadisticas a Fixed Objects
nota: Se suelen pasar estadisticas a las vistas del diccionario despues de un upgrade o cuando detectamos que las queries sobre el diccionario van lentas.

exec  DBMS_STATS.GATHER_FIXED_OBJECTS_STATS;

-- Informacion de las estadisticas de una tabla.

'View: DBA_TAB_STATISTICS'

exec print_table( 'SELECT * FROM dba_tab_statistics WHERE TABLE_NAME=''CF_TABLE''' );
/*
OWNER                         : MOGU
TABLE_NAME                    : CF_TABLE
PARTITION_NAME                :
PARTITION_POSITION            :
SUBPARTITION_NAME             :
SUBPARTITION_POSITION         :
OBJECT_TYPE                   : TABLE
NUM_ROWS                      : 109998
BLOCKS                        : 628
EMPTY_BLOCKS                  : 0
AVG_SPACE                     : 0
CHAIN_CNT                     : 0
AVG_ROW_LEN                   : 33
AVG_SPACE_FREELIST_BLOCKS     : 0
NUM_FREELIST_BLOCKS           : 0
AVG_CACHED_BLOCKS             :
AVG_CACHE_HIT_RATIO           :
SAMPLE_SIZE                   : 109998
LAST_ANALYZED                 : 26-feb-2016 12:37:05
GLOBAL_STATS                  : YES
USER_STATS                    : NO
STATTYPE_LOCKED               :
STALE_STATS                   : NO
SCOPE                         : SHARED
-----------------
*/

-- Borramos estadisticas

BEGIN
  DBMS_STATS.DELETE_TABLE_STATS('MOGU','CF_TABLE');
END;
/

-- Bloqueamos / Desbloqueamos  las estadisticas
View: DBA_TAB_STATISTICS.STATTYPE_LOCKED [NULL | ALL]

BEGIN
  DBMS_STATS.LOCK_TABLE_STATS('MOGU','CF_TABLE');
END;
/

BEGIN
  DBMS_STATS.UNLOCK_TABLE_STATS('MOGU','CF_TABLE');
END;
/


SELECT OWNER, TABLE_NAME, STATTYPE_LOCKED FROM DBA_TAB_STATISTICS WHERE STATTYPE_LOCKED IS NOT NULL;

-- Estadisticas de una tabla
'
Paquete:		DBMS_STATS
Funcion:		GATHER_TABLE_STATS
Parametros:
	OWNNAME:	Propietario de la tabla.(Obligatorio)
	TABNAME:	Nombre de la tabla.	(Obligatorio)
	ESTIMATE_PERCENT:	El valor por defecto AUTO_SAMPLE_SIZE. Hace que Oracle elija el porcentaje optimo.
	DEGREE:		Grado de paralelismo. Sino se especifica utiliza el DEGREE de la tabla
	CASCADE:	a TRUE indica si se pasan estadisticas a sus indices.
	NO_INVALIDATE:	a FALSE invalida el cursor.	
	
'

BEGIN
	DBMS_STATS.GATHER_TABLE_STATS(
		OWNNAME =>'MOGU',
		TABNAME =>'CF_TABLE',
		DEGREE	=>8);		
END;
/

COL TABLE_NAME FOR A30
SELECT TABLE_NAME, NUM_ROWS, (CASE NUM_ROWS WHEN 0 THEN NULL ELSE ROUND(SAMPLE_SIZE*100/NUM_ROWS)||'%' END) AS "SAMPLE SIZE(%)" FROM DBA_TAB_STATISTICS WHERE OWNER='MOGU' AND NUM_ROWS IS NOT NULL ORDER BY 2,3;
/*
TABLE_NAME                       NUM_ROWS SAMPLE SIZE(%)
------------------------------ ---------- -----------------
CF_TABLE                           109998 100%
*/

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

Blog de WordPress.com.

A %d blogueros les gusta esto: