Estadisticas del optimizador
Oracle dispone de un componente llamado optimizador, que se usa para optimizar las operaciones SQL.
Las sentencias SQL se pueden realizar de diferentes formas provocando una efectividad diferente, para optimizar esta ejecución el optimizador recoge estadísticas del Diccionario de Datos y con esta información diseña el plan de ejecución más eficiente.
OPTIMIZADOR.
Como cada sentencia SQL puede ejecutarse de distintas formas, por ejemplo, siguiendo distinto orden al realizar los joins. La elección del plan a ejecutar es critica para el rendimiento del sistema y en Oracle este plan es realizado por el optimizador.
La eficacia del plan a ejecutar depende directamente de lo actualizado que este la información de las estadísticas de la base de datos. Teniendo en cuenta que las estadísticas no se ofrecen en tiempo real sino en determinados momentos, pero también se puede forzar su actualización.
Las estadísticas se pueden forzar de 2 formas:
- Con el comando ANALYZE.
ANALYZE [TABLE | INDEX] nombre [COMPUTE | ESTIMATE | DELETE] STATISTICS opciones.
Con procedimientos del paquete DBMS_STATS:
- GATHER_DATABASE_STATS(): Recolecta estadísticas de todos los objetos de la BD.
- GATHER_DICTIONARY_STATS(): Recolecta estadísticas de esquemas SYS/SYSTEM y de componentes de RDBMS.
- GATHER_INDEX_STATS(): Recolecta estadísticas de índices.
- GATHER_SCHEMA_STATS(): Recolecta estadísticas de esquemas.
- GATHER_TABLE_STATS(): Genera estadísticas de tablas (e índices) y columnas.
ESTADISTICAS DE OBJETO.
Las vistas que nos proporciona información sobre las estadísticas son:
- DBA_TABLES.
- DBA_TAB_COLUMNS.
- DBA_INDEXES.
El análisis de una tabla junta la estadistica a la tabla. Las estadísticas son visibles en la vista DBA_TABLESque proporciona información tal como:
- Nº de filas en la tabla.
- Nº de bloques asignados a la tabla.
- Cantidad de espacio libre en bloques en uso.
- Media de longitud en cada registro.
- Nº de registros “encadenados”.
Aparte de la estadistica en cuanto a la tabla en su conjunto, cada columna de la tabla también es analizada. Las estadísticas de columna son visibles en la vista de DBA_TAB_COLUMNS, que proporciona información tal como:
- Nº de valores distintos.
- Valor máximo y mínimo.
- Nº de valores a NULL.
- Media de longitud de la columna.
Cuando una tabla es analizada, sus índices también son examinados. La estadistica de los índices son mostrados en la vista DBA_INDEXES, que proporciona información tal como:
- Profundidad del árbol índice.
- Nº de valores clave distintos.
- Factor de agrupación en cluster.
Estas estadísticas son almacenadas dentro del diccionario de datos y dan al optimizador la información que necesita para tomar decisiones vitales sobre como ejecutar la sentencia de la mejor forma.
También es posible juntar la estadistica a índices explicitamente. Estas estadísticas (adicional a aquellos untados junto con las estadísticas de tabla) son mostrados en la vista INDEX_STAT y proporciona información tal como:
- El número de entradas de índices que se refieren a filas existentes.
- El número de entradas de índices que se refieren a filas borradas.
Esta información es de valor porque es la forma en la cual los índices son mantenidos: cuando se elimina una fila de una tabla el índice no es actualizado por lo que después de un periodo prolongado, los índices pueden ser ineficaces debido a la cantidad de espacio ocupado por estas referencias a filas borradas.
Las estadísticas almacenadas en las vistas DBA_TABLES, el DBA_INDEXES y DBA_TAB_COLUMNSson actualizadas de forma automática al realizar un análisis de una tabla. El análisis de un índice informa las vistas INDEX_STATS.
ACTUALIZAR LAS ESTADISTICAS MANUALMENTE.
Las estadísticas de objeto se realizan en tiempo real, por lo que están desactualizados durante un tiempo y las operaciones DML a las tablas pueden no ser lo más efectivas posibles. Por lo tanto es necesario actualizar las estadísticas con regularidad y asegurarse de que el optimizer tiene las estadísticas lo más actualizadas posibles
La estadistica puede ser actualizada manualmente o esperar al proceso automático de actualización de estadísticas. Esta actualización de estadísticas manual se puede realizar:
- Con el comando ANALYZE TABLE nombre_tabla COMPUTE STATISTICS.
- COMPUTE STATISTICS realiza un análisis completo de la tabla.
- Ejecutando el procesos en el paquete DBMS_STATS.
- EXEC BMS_STATS.GATHER_TABLE_STATS(‘esquema,[nombre_tabla])
Con el Database Control: Emterprise Manager Database Control- SERVIDOR-GESTIONAR ESTADISTICAS DEL OPTIMIZADOR. Si la base de datos es creada con el Ayudante de Configuración de Base de datos, configura las estadísticas automatizadas, y
estadisticas optimizador