Perf top 10 tables

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 procedures · Perf objects without statistics

Perf top 10 tables liste les 10 tables les plus sollicitées actuellement présentes dans le cache SQL (v$sql), avec le détail par type d'instruction (INSERT, SELECT, UPDATE, DELETE, LOCK), le nombre d'exécutions, les buffer gets et les lignes traitées.

Script

SET LINESIZE 145
SET PAGESIZE 9999
SET VERIFY   OFF

COLUMN ctyp FORMAT a13                 HEADING 'Type de commande'
COLUMN obj  FORMAT a30                 HEADING 'Objet'
COLUMN noe  FORMAT 999,999,999,999,999 HEADING 'Exécutions'
COLUMN gets FORMAT 999,999,999,999,999 HEADING 'Buffer Gets'
COLUMN rowp FORMAT 999,999,999,999,999 HEADING 'Lignes traitées'

BREAK ON report
COMPUTE SUM OF noe  ON report
COMPUTE SUM OF gets ON report
COMPUTE SUM OF rowp ON report

SELECT ctyp, obj, noe, gets, rowp
FROM (
    SELECT
        DECODE(s.command_type
             , 2,  'Insert into '
             , 3,  'Select from '
             , 6,  'Update  of  '
             , 7,  'Delete from '
             , 26, 'Lock    of  ')    ctyp
      , o.owner || '.' || o.name      obj
      , SUM(s.executions)             noe
      , SUM(s.buffer_gets)            gets
      , SUM(s.rows_processed)         rowp
    FROM
        v$sql               s
      , v$object_dependency  d
      , v$db_object_cache    o
    WHERE
        s.command_type IN (2, 3, 6, 7, 26)
      AND d.from_address = s.address
      AND d.to_owner      = o.owner
      AND d.to_name        = o.name
      AND o.type           = 'TABLE'
    GROUP BY s.command_type, o.owner, o.name
    ORDER BY SUM(s.executions) DESC
)
WHERE ROWNUM <= 10
/

Comme pour Perf top 10 procedures, le script d'origine ne posait pas de véritable ORDER BY avant WHERE rownum <= 10 (astuce 0 - executions sans tri effectif) : le « top 10 » n'était pas garanti trié par nombre d'exécutions. La requête ci-dessus ajoute ORDER BY SUM(s.executions) DESC dans la vue en ligne pour un vrai classement avant restriction du ROWNUM.

Interprétation

  • Comme v$db_object_cache, v$sql/v$object_dependency reflètent uniquement le contenu courant du cache SQL — un curseur vieilli ou fermé disparaît des compteurs. Ce script donne une photo de l'activité récente, pas un cumul fiable sur une longue période.
  • Une table qui domine systématiquement ce classement en SELECT est une bonne candidate à vérifier en priorité côté index/statistiques (voir Perf objects without statistics) et côté buffer cache (voir Perf hit ratio by session).
  • Une table dominante en INSERT/UPDATE/DELETE avec un ratio buffer gets / lignes traitées élevé peut indiquer un accès par scan plutôt que par index sur les DML eux-mêmes.

Voir aussi