Mantenimiento y purgado de STATSPACK en Oracle (PERFSTAT)
En más de una ocasión, los que administramos bases de datos donde no disponemos de licenciamiento para el Diagnostics Pack nos apoyamos en Statspack como nuestra principal herramienta de diagnóstico histórico. Sin embargo, si no mantenemos una política de limpieza estricta, el esquema PERFSTAT puede crecer de forma desmesurada en nuestros discos.
Continuando con las buenas prácticas para mantener saludable nuestro esquema PERFSTAT, hoy veremos un enfoque de control absoluto: cómo purgar por rangos específicos de snap_id, cómo recuperar físicamente el espacio en disco mediante el comando SHRINK SPACE y algunas recomendaciones de rendimiento asociadas.
Antes de ejecutar cualquier acción, el primer paso es consultar los snapshots disponibles en el repositorio para definir con exactitud el rango que deseamos eliminar.
Nota: Ejecuta la siguiente consulta conectado con el usuario administrador o PERFSTAT:
SELECT snap_id, snap_time
FROM perfstat.stats$snapshot
ORDER BY snap_id ASC;
SELECT segment_name,ROUND(SUM(bytes)/1024/1024/1024, 2) AS size_gb
FROM dba_segments
WHERE owner = 'PERFSTAT'
AND segment_name IN ('STATS$SQL_SUMMARY', 'STATS$SQLTEXT', 'STATS$FILESTATXS')
GROUP BY segment_name
ORDER BY size_gb DESC;
statspack.purge especificando los parámetros de rango i_begin_snap e i_end_snap:BEGINperfstat.statspack.purge( i_begin_snap => 90160 , i_end_snap => 106699);END;/COMMIT;
Al realizar un purge, las filas son eliminadas de las tablas, pero los segmentos lógicos (High Water Mark) y el espacio en los ficheros de datos no se liberan automáticamente de forma predeterminada. Las tablas siguen reteniendo el tamaño anterior en disco.
Para compactar las tablas más pesadas del esquema PERFSTAT y devolver el espacio libre al tablespace, aplicamos la habilitación de movimiento de filas (ROW MOVEMENT) y el comando SHRINK SPACE:
-- 1. Mantenimiento sobre STATS$SQL_SUMMARY
ALTER TABLE perfstat.STATS$SQL_SUMMARY ENABLE ROW MOVEMENT;
ALTER TABLE perfstat.STATS$SQL_SUMMARY SHRINK SPACE;
ALTER TABLE perfstat.STATS$SQL_SUMMARY DISABLE ROW MOVEMENT;
-- 2. Mantenimiento sobre STATS$SQLTEXT
ALTER TABLE perfstat.STATS$SQLTEXT ENABLE ROW MOVEMENT;
ALTER TABLE perfstat.STATS$SQLTEXT SHRINK SPACE;
ALTER TABLE perfstat.STATS$SQLTEXT DISABLE ROW MOVEMENT;
-- 3. Mantenimiento sobre STATS$FILESTATXS
ALTER TABLE perfstat.STATS$FILESTATXS ENABLE ROW MOVEMENT;
ALTER TABLE perfstat.STATS$FILESTATXS SHRINK SPACE;
ALTER TABLE perfstat.STATS$FILESTATXS DISABLE ROW MOVEMENT;
SHRINK generan bloqueos momentáneos y consumo de recursos, por lo que se recomienda ejecutarlas en ventanas de mantenimiento o periodos de baja actividad (fuera de horario pico).ALTER INDEX perfstat.stats$sql_summary_pk REBUILD ONLINE;ALTER INDEX perfstat.stats$sqltext_pk REBUILD ONLINE;