Object search

par | Juin 26, 2024 | Trucs et Astuces

Un objet Oracle a-t-il été utilisé sur une période ?

La fenêtre Replay de résumé de l’activité Oracle fournit entre autres éléments la liste des requêtes SQL qui ont consommé du temps (elapsed time) ou des ressources (CPU, IOs) sur la période sélectionnée.

Le bouton “Object search” amène dans une fenêtre de recherche permettant de répondre à la question suivante :
“un objet a-t-il été utilisé par Oracle sur cette période ?”

Index usage

Cette fonctionnalité recherche alors, dans les plans d’exécution observés sur la période retenue, la présence de l’objet mentionné.
On peut ainsi vérifier si :

  • une table a été accédée,
  • un index a été choisi par l’optimiseur Oracle,
  • une vue matérialisée a été exploitée (par exemple grâce à la puissante fonctionnalité de Query rewrite d’Oracle)

pendant l’exécution d’un traitement ou au sein d’une tranche horaire.

Si l’objet recherché est trouvé, alors Replay affiche l’ensemble des requêtes SQL l’ayant utilisé.

Par exemple, si l’on souhaite savoir si l’index nommé CUST_I a été utilisé pendant un traitement, alors on voit par quelles requêtes SQL cet index a été utilisé :

On voit même ici l’ordre de création de l’index recherché, puisqu’il fait partie de la période sélectionnée.
Pour connaître en détail l’heure d’exécution, la durée de la requête, le nombre de lignes traitées, la consommation, etc. il suffit de double-cliquer sur la requête concernée.

Object usage

Il se peut qu’aucune correspondance ne soit trouvée dans la période sélectionnée.
Par exemple, si l’on cherche une vue matérialisée nommée “MV_CUSTOM” et qu’aucun résultat n’est trouvé, cela signifie que ni cette vue matérialisée ni aucun objet avec ce nom n’est présent dans les plans d’exécution de la période.
Comme aucun plan d’exécution de la période ne passe par cet objet, le message suivant est affiché:

Object search

L’opérateur SQL qui est utilisé pour la recherche dans les plans d’exécution est un LIKE.
Cela permet de rechercher exactement un nom, comme dans les précédents exemples avec CUST_I et MV_CUSTOM.
Comme de rechercher un ensemble de noms ou des noms qui se ressemblent.
Par exemple, on souhaite savoir si des objets dont le nom débute par CUSTOM ont été utilisés par Oracle dans la période d’activité :

La fonctionnalité Object search identifie ici qu’une table nommée CUSTOMERS et une table nommée CUSTOMERS_HIST (premier ordre SQL) ont bien été utilisées par Oracle, dans ses plans d’exécution, sur la période de 14h15 à 14h22.

Object search et filter

Cette recherche d’objet au sein des plans d’exécution est différente de la recherche dans le texte de la requête.
Ces deux fonctionnalités répondent à des objectifs distincts.
Le filtre est d’ailleurs disponible en bas de la fenêtre Object search pour affiner encore le résultat de la recherche si besoin, et son fonctionnement est documenté dans un autre article “Filtres et caractères spéciaux“.

Cas d’usage

La fonctionnalité Object search peut être intéressante par exemple lorsque l’on recherche les index qui ne sont pas utilisés.
Si un index n’est jamais utilisé, alors il pourrait et même devrait probablement être détruit, pour économiser de l’espace et accélérer les mises à jour (performances des ordres DML INSERT, UPDATE, DELETE et MERGE).
De même, cette fonctionnalité peut servir, quand on a créé un index, à confirmer qu’il améliore la requête visée, voire potentiellement d’autres requêtes, ainsi qu’à vérifier qu’il ne dégrade pas un autre traitement.