Automatic Indexing. Nueva funcionalidad de Oracle

Hola a todos. Hoy vamos a hablaros sobre una nueva funcionalidad de Oracle 19c que creemos que puede sernos muy útil. La funcionalidad se llama Automatic Indexing y es uno de los avances más importantes que se han producido en los últimos años.

¿En qué consiste el Automatic Indexing?

Básicamente, la base de datos analiza la carga actual de la misma y es capaz de identificar posibles índices que puedan mejorarla de forma autónoma. Los crea de una forma no visible para lo usuarios (invisibles) y evalúa si su rendimiento es el esperado, si es así, los convierte en visibles para los aplicativos y los deja como permanentes.

El cirtuito que sigue en la evaluación es el siguiente:

automatic indexing oracle 19c gpsos

Es un proceso que corre cada 15 minutos por defecto en background y se encarga del mantenimiento de los índices. La funcionalidad se gestiona con el paquete DBMS_AUTO_INDEX y tiene las siguientes peculiaridades:

  • Los índices automáticos candidatos son creados como índices invibles por defecto.
  • Si el rendimiento de las sentencias SQL no mejoran con el índice nuevo, el índice se marca como UNUSABLE y las sentencias SQL se marcan en una blacklist.
  • Los Auto indexes no se pueden utilizar para una sentencia SQL que se ejecuta por primera vez en la base de datos.
  • Los auto indexes se crean como sencillos (una columna), índices concatenados o índices con funciones y todos utilizan advanced low compression.
  • Los auto indexes no utilizados se borran después de 373 días por defecto.
  • Los índices que no son automático pero no se utilizan (los creados manualmente) no se borran nunca por el proceso automático de indexación (pero se puede configurar también).

El proceso de automatic indexing se puede desactivar en cualquier momento o dejar solo en modo report, creándose solo en modo invisble y sin ser utilizado por el gestor. Esto se realiza con los comandos:

 EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','OFF');  
 EXEC DBMS_AUTO_INDEX.CONFIGURE('AUTO_INDEX_MODE','REPORT ONLY');    

Ver la actividad del proceso

Para ver la actividad que ha realizado el proceso se utiliza el report_activity del propio paquete:

SELECT DBMS_AUTO_INDEX.report_activity() FROM dual;

Como hemos podido ver la funcionalidad es muy interesante y en los sitios que hemos testeado suele funcionar bastante bien.

Esperamos que os guste la entrada y hasta la próxima. Si no quieres perderte ninguna, apúntate a nuestra newsletter mensual. Con un solo email al mes estarás informado de todas nuestras publicaciones.

Más información: https://blogs.oracle.com/oraclemagazine/autonomous-indexing