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.
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:

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
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.