Perf top 10 tables
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_dependencyreflè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
SELECTest 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/DELETEavec 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
- Perf top 10 procedures — même principe côté objets PL/SQL.
- Perf objects without statistics — pour vérifier que les tables identifiées ici disposent bien de statistiques à jour.