Perf top 10 procedures

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic
Domaine Performance
Voir aussi Perf top 10 tables

Perf top 10 procedures liste les 10 objets PL/SQL (fonctions, packages, corps de package, procédures, triggers) les plus exécutés actuellement présents dans le cache d'objets de la base (v$db_object_cache).

Script

SET LINESIZE 145
SET PAGESIZE 9999
SET VERIFY   OFF

COLUMN ptyp FORMAT a13                 HEADING 'Type d''objet'
COLUMN obj  FORMAT a42                 HEADING 'Objet'
COLUMN noe  FORMAT 999,999,999,999,999 HEADING 'Exécutions'

BREAK ON report
COMPUTE SUM OF noe ON report

SELECT ptyp, obj, noe
FROM (
    SELECT
        o.type                    AS ptyp
      , o.owner || '.' || o.name  AS obj
      , o.executions              AS noe
    FROM v$db_object_cache o
    WHERE o.type IN ('FUNCTION', 'PACKAGE', 'PACKAGE BODY', 'PROCEDURE', 'TRIGGER')
    ORDER BY o.executions DESC
)
WHERE ROWNUM <= 10
/

Le script d'origine construisait un ordre décroissant via l'astuce 0 - executions mais sans jamais poser de vrai ORDER BY avant d'appliquer WHERE rownum <= 10 : le « top 10 » retourné dépendait de l'ordre physique de lecture de v$db_object_cache, pas du nombre d'exécutions. La requête ci-dessus trie explicitement (ORDER BY o.executions DESC) dans la vue en ligne avant de restreindre à 10 lignes — c'est le motif standard « Top-N » en Oracle (le tri est évalué avant que ROWNUM ne soit assigné en sortie).

Interprétation

  • v$db_object_cache reflète le contenu actuel de la library cache : le compteur executions repart de zéro si l'objet est vieilli/rechargé (par manque de place dans le shared pool, ou après un DDL invalidant le plan). Ce n'est donc pas un cumul fiable depuis le démarrage de l'instance, contrairement à v$sysstat.
  • Pour un historique fiable et non tributaire du contenu courant du cache, préférer une source AWR/Statspack (si licence Diagnostics Pack disponible) plutôt que ce script pour des analyses de tendance dans la durée.
  • Utile en revanche pour un diagnostic « à chaud » : identifier immédiatement quel objet PL/SQL concentre l'activité au moment de l'exécution du script.

Voir aussi

  • Perf top 10 tables — même principe côté tables, avec détail par type d'opération DML.