Oracle Live

12/04/2016

Restaurar estadisticas anteriores

Filed under: Database,Estadisticas — mogukiller @ 12:05 am

Se puede dar la situación que por error o por desconocimiento del entorno pasemos estádisticas a una tabla que genere que cambien los planes de ejecución de las queries, generando un problema de rendimiento. Para revertir esto es necesario restaurar las estádisticas anteriores.

-- Historico de estadisticas disponibles.
-- Restaurar estadisticas anteriores
-- Calculamos la diferencia entre varias estadisticas de una tabla

'Nos indica hasta donde podemos retroceder'

COL OWNER FOR A20
COL TABLE_NAME FOR A25
SELECT OWNER, TABLE_NAME, STATS_UPDATE_TIME FROM DBA_TAB_STATS_HISTORY WHERE OWNER='MOGU' AND TABLE_NAME='CF_TABLE' ORDER BY 3;
/*
OWNER                TABLE_NAME                STATS_UPDATE_TIME
-------------------- ------------------------- ---------------------------------------
MOGU                 CF_TABLE                  26-FEB-16 12.24.27.245292 PM +01:00
MOGU                 CF_TABLE                  26-FEB-16 12.33.21.722913 PM +01:00
MOGU                 CF_TABLE                  26-FEB-16 12.37.05.459335 PM +01:00
MOGU                 CF_TABLE                  02-MAR-16 11.54.37.692275 AM +01:00
MOGU                 CF_TABLE                  02-MAR-16 11.57.44.847092 AM +01:00
MOGU                 CF_TABLE                  02-MAR-16 03.28.19.484071 PM +01:00
MOGU                 CF_TABLE                  03-MAR-16 03.10.11.380215 PM +01:00
MOGU                 CF_TABLE                  03-MAR-16 03.24.18.982776 PM +01:00
MOGU                 CF_TABLE                  03-MAR-16 06.18.44.659466 PM +01:00	<<<<<< Queremos recuperar las estadisticas antes del truncado
MOGU                 CF_TABLE                  03-MAR-16 07.40.23.184395 PM +01:00	<<<<<<	
*/

-- Restaurar estadisticas anteriores

BEGIN 
DBMS_STATS.RESTORE_TABLE_STATS(
	ownname      => 'MOGU',  
    tabname     => 'CF_TABLE',  
    as_of_timestamp => '03-MAR-16 07.40.23.184395 PM +01:00',
    force       => FALSE, 
    no_invalidate   => FALSE); 
END; 
/ 

SQL> exec print_table( 'SELECT * FROM dba_tab_statistics WHERE TABLE_NAME=''CF_TABLE''' );
/*
OWNER                         : MOGU
TABLE_NAME                    : CF_TABLE
OBJECT_TYPE                   : TABLE
NUM_ROWS                      : 109998
BLOCKS                        : 628
AVG_ROW_LEN                   : 31
SAMPLE_SIZE                   : 109998
LAST_ANALYZED                 : 03-mar-2016 18:18:44	<<<<< Vemos como me ha recuperado las estadisticas anteriores
-----------------
*/

-- Calculamos la diferencia entre varias estadisticas de una tabla
set long 100000
select * from table(dbms_stats.diff_table_stats_in_history(
                    ownname => 'MOGU',
                    tabname => 'CF_TABLE',
                    time1 => '03-MAR-16 07.40.23.184395 PM +01:00',
                    time2 => '04-MAR-16 09.14.08.244127 AM +01:00',
                    pctthreshold => 0)); 
					
set long 100000
select * from table(dbms_stats.diff_table_stats_in_history(
                    ownname => 'MOGU',
                    tabname => 'CF_TABLE',
                    time1 => '03-MAR-16 06.18.44.659466 PM +01:00',	<<<< Directamente con las estadisticas actuales
                    pctthreshold => 0)); 
/*					
STATISTICS DIFFERENCE REPORT FOR:
.................................

TABLE         : CF_TABLE
OWNER         : MOGU
SOURCE A      : Statistics as of 03-MAR-16 06.18.44.659466 PM +01:00
SOURCE B      : Current Statistics in dictionary

TABLE / (SUB)PARTITION STATISTICS DIFFERENCE:
.............................................

OBJECTNAME                  TYP SRC ROWS       BLOCKS     ROWLEN     SAMPSIZE
...............................................................................


REPORT
--------------------------------------------------------------------------------
MAXDIFFPCT
----------
CF_TABLE                    T   A   109998     628        31         109998
                                B   82453      622        29         82453
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

COLUMN STATISTICS DIFFERENCE:
.............................

COLUMN_NAME     SRC NDV     DENSITY    HIST NULLS   LEN  MIN   MAX   SAMPSIZ
...............................................................................

REPORT
--------------------------------------------------------------------------------
MAXDIFFPCT
----------

ID_VALOR        A   109998  .000009091 NO   0       8    3A503 C5163 109998
                B   27316   .000036608 NO   54989   3    C3064 C50B4 27464
VALOR           A   107848  .000009272 NO   0       26   41414 5A5A5 109998
                B   80560   .000012413 NO   0       26   41414 5A5A5 82453
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/

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: