Comment exploiter la fonction d’indexation automatique dans les bases de données Oracle

Comme son nom l’indique et le simplifie, Oracle s’est modernisé avec sa version 19c où la fonction d’indexation automatique détecte le besoin d’index, les crée et les retire « automatiquement » sans intervention de personne (lire DBA). C’est comme un administrateur de base de données dans la boîte électronique, assis à l’intérieur même de la base de données.

Cette fonctionnalité s’exécutera en arrière-plan, toutes les 15 minutes, et exécutera les fonctions suivantes :

  • Identifier les candidats à l’indexation automatique en fonction de l’utilisation des colonnes dans les tables
  • Testez l’index automatique créé par rapport au texte SQL
    1. S’il y a une amélioration de performance, l’indice devient visible
    2. Si la performance se dégrade, l’indice est marqué inutilisable
    3. Tout indice automatique qui n’est pas utilisé pendant 373 jours (valeur par défaut modifiable) est supprimé

La fonction d’indexation automatique peut être implémentée dans un environnement de test ou de développement, et le régleur de performance dans la boîte d’exécution affinera automatiquement les SQL. Si une amélioration significative ou même une amélioration de performance est observée, nous pouvons tester minutieusement les indices et décider s’ils sont activés dans la boîte de production. Cette fonctionnalité peut être utilisée à toutes les étapes de préproduction du cycle de vie de l’application et peut s’avérer très utile pour le traitement transactionnel en ligne (OLTP) et parfois aussi pour les bases de données de charges de travail mixtes.

Souvent, les textes, tableaux et colonnes SQL ne changent pas dans une base de données. Mais le schéma de données ou les données à l’intérieur du tableau changent constamment. Les indices créés manuellement peuvent soudainement être compromis et causer des problèmes de performance. L’indexation automatique est une étoile à ces moments-là parce qu’elle peut identifier les mauvais index, créer de nouveaux index, les valider par rapport aux instructions SQL, et les rendre visibles ou invisibles selon les exigences. Ouf, voilà pour une seule caractéristique...

Voici quelques exemples liés à l’indexation automatique qui montrent comment activer, modifier et utiliser cette fonctionnalité dans une base de données 19c.

Oracle a pris en compte beaucoup plus de détails techniques lors de la création et de la maintenance de l’indexation automatique. Nous n’incluons pas tout cela dans cet article puisque nous ne voyons cette fonctionnalité qu’en vue aérienne.

Activez l’index automatique :

begin
dbms_auto_index.configure ('AUTO_INDEX_MODE', 'IMPLEMENT');
fin;
/

Si vous hésitez à implémenter directement la fonction Auto Index, en utilisant l’exemple ci-dessous, vous pouvez créer l’index mais le garder invisible jusqu’à ce qu’il soit prêt pour le monde. Pour mieux expliquer, la fonction « report_only » capturera les instructions SQL et identifiera les candidats potentiels qui peuvent être aidés à la création d’un index. Il crée ensuite ces index automatiquement en mode invisible.

begin
dbms_auto_index.configure ('AUTO_INDEX_MODE','REPORT UNIQUE');
fin;
/

Ensuite, la fonction d’Index automatique crée cet index « invisible », donc il reste inconnu de l’optimiseur de la base de données. Cela sert à tester l’index par rapport aux instructions SQL. Si la performance SQL s’améliore, l’index est marqué « visible », sinon, il reste « invisible ».

Les index créés par l’indexation automatique commencent par « SYS_AI » pour les distinguer des index créés manuellement. De plus, il y a une nouvelle colonne dans le tableau DBA_INDEXES qui sera marquée « OUI » pour les autoindex.

Toutes les affirmations mentionnées ci-dessus peuvent vous faire penser que « tous les index ne pourront pas aider toutes les instructions SQL, cela peut améliorer la performance pour certains mais en faire disparaître d’autres, que se passe-t-il alors? »

L’indexation automobile vient à la rescousse ici aussi... La fonction d’indexation automatique crée une ligne de base SQL qui empêchera une phrase SQL dont la performance a diminué à cause de l’index d’utiliser cet index. Mais d’autres SQL qui ont amélioré leurs performances continueront d’utiliser l’index.

Voici quelques autres éléments de l’indexation automatique :

À Syntax
désactiver l’index automatique DBMS_AUTO_INDEX. CONFIGURE('AUTO_INDEX_MODE','OFF');
exclure tout schéma de la fonction d’index automatique DBMS_AUTO_INDEX.CONFIGURE(‘AUTO_INDEX_EXCLUDE_SCHEMA’, ‘<SCHEMA_NAME>’);
des indices pouvant être utilisés pour contrôler l’utilisation de l’indexation automatique /*+ USE_AUTO_INDEXES */
/*+ NO_USE_AUTO_INDEXES */

Il y a quelques autres fonctionnalités étonnantes qu’Oracle a prises en compte lors de la création de cette fonctionnalité :

  • Le système ne prend pas en compte les auto-index créés pour les instructions SQL qui s’exécutent pour la première fois.
  • Un DBA peut désactiver une fonction d’indexation automatique pendant une courte période, au besoin.
  • Si une tâche d’indexation automatique ne se termine pas dans le temps imparti, la prochaine étape sera sautée, afin d’éviter les tâches incontrôlables.

L’indexation automatique permet à un DBA de se soucier un peu moins des problèmes de performance, mais ne cause pas de perte de contrôle sur la manière et le moment où les indices sont créés.

Nous avons failli oublier d’inclure une nouvelle excitante concernant cette fonctionnalité. Actuellement, l’indexation automatique est uniquement disponible et sous licence avec l’édition Enterprise sur des systèmes conçus, comme Exadata. Cependant, pour des tests à court terme SEULEMENT, vous pouvez activer le paramètre « _exadata_feature_on » dans un environnement de test d’une base de données d’édition entreprise pour tester la fonction d’indexation automatique.

Pour l’impact sur la licence, veuillez vérifier auprès du support Oracle ou de votre service commercial Oracle, selon les besoins. En savoir plus ici.

La fonction d’indexation automatique récemment introduite avec Oracle Database 19c vous permet de confier certaines décisions concernant la gestion des index à la base de données et vous (le DBA) de vous concentrer sur d’autres défis plus urgents. Cette capacité d’automatisation peut détecter le besoin d’index, les créer et les supprimer automatiquement, ouvrant la voie à l’innovation future dans votre système.