Real Time Statistics - Oracle Database 19c

Por Francisco Riccio
Publicado en Abril 2019




Introducción



Una de las principales causas a los problemas de desempeño que tienen las bases de datos es contar con estadísticas desfasadas de sus tablas e índices, teniendo como consecuencia planes de ejecución ineficientes.

Oracle Database 10g ha realizado esfuerzos por mantener las estadísticas de base de datos de manera actualizada, para ello implementó tareas automatizadas que recolectan estadísticas en horas definidas, también recolecta estadísticas a una tabla particular cuando se crea algún índice sobre ella. La versión Oracle Database 12c añadió una extensión permitiendo recolectar estadísticas automáticamente cuando se crean tablas a partir de una consulta (create table as select).

Hoy la versión Oracle Database 19c permite recolectar estadísticas cuando una operación DML convencional o una importación ocurre, pero la información recolectada es una información “ligera” y se complementará cuando ocurra una recolección completa a través del paquete DBMS_STATS. Aún esta información “ligera” es válida para entregarle al optimizador mejor información sobre los datos de una tabla y optar por un mejor plan de ejecución dando como resultado un beneficio de desempeño.

 




Implementación



La funcionalidad se encuentra habilitada por defecto y lo que se realizará a continuación es un análisis y validación.

Para realizar nuestra validación se cuenta con una tabla llamada TEST con 2 millones de filas y se procederá a insertar 500,000 filas de manera convencional.




Se revisará algunas vistas del sistema que permitirán validar la información recolectada:



Se puede apreciar que la base de datos ha recolectado información sobre la tabla y tiene información que ahora el número de registros es de 2.5 millones y no 2 millones.

También es importante recordar que en versiones anteriores la cantidad de operaciones DML que ocurría sobre una tabla podía ser obtenida por la vista: DBA_TAB_MODIFICATIONS.





Lo más interesante es si corremos una consulta sobre la tabla, podremos validar que el optimizar tomó ventaja de esta nueva funcionalidad para obtener un plan de ejecución más eficiente cuando ocurra un hard parse.




Esta nueva funcionalidad no incluye un overhead sobre las operaciones DML, para validarlo volveremos a cargar 500 mil filas sin la opción habilitada, previa actualización de estadísticas completa.



Con la modificación de los parámetros ocultos se desactiva la funcionalidad pero esto no debe ser aplicado en algún entorno salvo sea una recomendación de Oracle Support. Se ha realizado estos cambios para propósito de este ejemplo.



Iniciamos el ingreso de 500 mil filas de manera convencional y tendremos el siguiente resultado:




Se aprecia que las operaciones DML convencionales no se vieron afectadas en el tiempo de duración y que la base de datos ya no recolectó estadísticas sobre dichas operaciones en la tabla.

Asimismo al ejecutar consultas sobre la tabla, el optimizador no tomará alguna ventaja al no contar con la información




Conclusión



Esta nueva funcionalidad permite a los Administradores de Base de Datos mantener una base de datos más estable en temas de rendimiento sin alguna intervención manual, además de no generar un overhead significativo a las operaciones DML convencionales e importaciones.




Francisco Riccio, actualmente se desempeña como Arquitecto de Soluciones en Oracle Perú y es instructor de cursos oficiales de certificación Oracle. Es un Oracle Certified Professional en productos de Oracle Application, Base de Datos, Cloud & Virtualización.

Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.