Dba object cache

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic
Domaine Administration (mémoire partagée / library cache)
Voir aussi Dba object summary · Dba plsql package size

Dba object cache interroge directement la structure interne x$kglob (library cache du shared pool) pour lister tous les objets actuellement en cache : curseurs, tables, packages, triggers... avec leur empreinte mémoire, leur nombre de chargements/exécutions et leurs verrous/épingles (locks/pins).

C'est un diagnostic plus bas niveau que v$db_object_cache (qui offre les mêmes informations de façon plus lisible) : ici, les codes numériques internes de namespace et de type sont décodés explicitement, ce qui documente au passage la table de correspondance des types d'objets du library cache.

Script

SET TERMOUT OFF
COLUMN current_instance NEW_VALUE current_instance NOPRINT
SELECT RPAD(instance_name, 17) current_instance FROM v$instance;
SET TERMOUT ON

PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | Report   : Summary of Objects in the Shared Pool Cache                 |
PROMPT | Instance : &current_instance                                          |
PROMPT +------------------------------------------------------------------------+

SET ECHO      OFF
SET FEEDBACK  6
SET HEADING   ON
SET LINESIZE  180
SET PAGESIZE  50000
SET VERIFY    OFF

COLUMN inst_id       HEAD "Inst.|ID"
COLUMN owner         FORMAT a10             HEAD "Owner"
COLUMN name          FORMAT a30             HEAD "Name"
COLUMN namespace     FORMAT a25             HEAD "Namespace"
COLUMN type          FORMAT a18             HEAD "Type"
COLUMN sharable_mem  FORMAT 99,999,999,999  HEAD "Sharable|Memory"
COLUMN loads                                HEAD "Loads"
COLUMN executions    FORMAT 99,999,999      HEAD "Executions"
COLUMN locks                                HEAD "Locks"
COLUMN pins                                 HEAD "Pins"
COLUMN kept          FORMAT a5              HEAD "Kept?"

BREAK ON report
COMPUTE sum OF sharable_mem ON report

DEFINE spool_file=shared_pool_object_cache.lst
SPOOL &spool_file

SELECT
    inst_id                                 inst_id
  , kglnaown                                owner
  , kglnaobj                                name
  , DECODE(kglhdnsp
          , 0 , 'CURSOR'
          , 1 , 'TABLE/PROCEDURE'
          , 2 , 'BODY'
          , 3 , 'TRIGGER'
          , 4 , 'INDEX'
          , 5 , 'CLUSTER'
          , 6 , 'OBJECT'
          , 13, 'JAVA SOURCE'
          , 14, 'JAVA RESOURCE'
          , 19, 'SUMMARY'
          , 20, 'DIMENSION'
          , 21, 'APP CONTEXT'
          , 22, 'STORED OUTLINE'
          , 23, 'RULESET'
          , 24, 'RSRC PLAN'
          , 25, 'RSRC CONSUMER GROUP'
          , 'INVALID NAMESPACE'
    )                                       namespace
  , DECODE(BITAND(kglobflg, 3)
          , 0, 'NOT LOADED'
          , 2, 'NON-EXISTENT'
          , 3, 'INVALID STATUS'
          , DECODE(kglobtyp
                  , 0 , 'CURSOR'
                  , 1 , 'INDEX'
                  , 2 , 'TABLE'
                  , 3 , 'CLUSTER'
                  , 4 , 'VIEW'
                  , 5 , 'SYNONYM'
                  , 6 , 'SEQUENCE'
                  , 7 , 'PROCEDURE'
                  , 8 , 'FUNCTION'
                  , 9 , 'PACKAGE'
                  , 11, 'PACKAGE BODY'
                  , 12, 'TRIGGER'
                  , 13, 'TYPE'
                  , 14, 'TYPE BODY'
                  , 15, 'OBJECT'
                  , 16, 'USER'
                  , 17, 'DBLINK'
                  , 22, 'LIBRARY'
                  , 23, 'DIRECTORY'
                  , 24, 'QUEUE'
                  , 'INVALID TYPE'
          )
    )                                       type
  , kglobhs0 + kglobhs1 + kglobhs2 + kglobhs3 + kglobhs4 + kglobhs5 + kglobhs6  sharable_mem
  , kglhdldc                                loads
  , kglhdexc                                executions
  , kglhdlkc                                locks
  , kglobpc0                                pins
  , DECODE(kglhdkmk, 0, 'NO', 'YES')        kept
FROM x$kglob
/

SPOOL OFF
SET TERMOUT ON
PROMPT Report written to &spool_file

Colonnes / sortie

  • Owner / Name — propriétaire et nom de l'objet en cache.
  • Namespace — catégorie interne de l'objet (curseur, table/procédure, corps de package, trigger...).
  • Type — type précis décodé (PACKAGE, PACKAGE BODY, PROCEDURE, VIEW...).
  • Sharable Memory — mémoire occupée dans le shared pool par cet objet.
  • Loads — nombre de (re)chargements depuis le dictionnaire de données ; des loads répétés sur le même objet signalent souvent des invalidations/expulsions à répétition (shared pool trop petit, ou objet trop souvent invalidé).
  • Executions — nombre d'exécutions du curseur/objet.
  • Locks / Pins — verrous et épingles en cours, empêchant l'expulsion de l'objet du cache tant qu'ils sont posés.
  • Kept? — objet marqué "conservé" en mémoire via DBMS_SHARED_POOL.KEEP (protège les gros packages sensibles des expulsions liées à la fragmentation du shared pool).

La liste des codes de namespace/type a été réduite ici aux valeurs les plus courantes en environnement applicatif classique ; x$kglob en couvre davantage (types liés à Java, à la réplication, aux profils de sécurité...), rarement rencontrés en usage courant.

Voir aussi