対応バージョン

Oracle Database 12.1.0

更新履歴

日付更新概要
2016/06/24記事公開

ここではPDBごとのSGA状況の確認について説明します。

SGAのバッファキャッシュ状況確認

オブジェクトごとのバッファキャッシュ状況出力

PDBごとに、どの程度バッファキャッシュを使用しているかを確認するためにはV$BH表を利用します。V$BH表ではSGA内のバッファの状態を確認することが出来ます。

使用しているバッファキャッシュに搭載されているブロック数を使用オブジェクトごとに出力します。現在使用しているもののみ出力されます。

SQL> select bh.INST_ID
  2       , bh.CON_ID
  3       , vc.NAME as CON_NAME
  4       , co.OWNER
  5       , co.OBJECT_NAME
  6       , co.OBJECT_TYPE
  7       -- 数を集計することでブロック数を算出します。
  8       , count(1) BLOCK_NUMS
  9    from CDB_OBJECTS co
 10       , GV$BH bh
 11       , GV$CONTAINERS vc
 12   where co.CON_ID = bh.CON_ID
 13     and co.CON_ID = vc.CON_ID
 14     and bh.INST_ID = vc.INST_ID
 15     and co.DATA_OBJECT_ID = bh.OBJD
 16     and bh.STATUS <> 'free'
 17   group by bh.INST_ID
 18       , bh.CON_ID
 19       , vc.NAME
 20       , co.OWNER
 21       , co.OBJECT_NAME
 22       , co.OBJECT_TYPE
 23   order by BLOCK_NUMS
 24       , bh.INST_ID
 25       , bh.CON_ID
 26  ;

   INST_ID     CON_ID CON_NAME                       OWNER                OBJECT_NAME                    OBJECT_TYPE             BLOCK_NUMS
---------- ---------- ------------------------------ -------------------- ------------------------------ ----------------------- ----------
         1          1 CDB$ROOT                       SYS                  DBMS_LOCK_ALLOCATED            TABLE                            1
         1          1 CDB$ROOT                       SYS                  I_INDPART_OBJ$                 INDEX                            1
         1          1 CDB$ROOT                       SYS                  I_OPT_DIRECTIVE_OWN#           INDEX                            1
         1          1 CDB$ROOT                       SYS                  WRH$_LATCH                     TABLE PARTITION                  1
....
         1          3 PDBORCL                        SYS                  NTAB$                          TABLE                         2419
         1          3 PDBORCL                        SYS                  VIEWTRCOL$                     TABLE                         2419
         1          3 PDBORCL                        SYS                  SUBCOLTYPE$                    TABLE                         2419
         1          3 PDBORCL                        SYSMAN               EM_EVENT_ANNOTATIONS           TABLE PARTITION               2979

1073 rows selected.

コンテナ(PDB)ごとのバッファキャッシュ状況出力

コンテナ毎に使用しているバッファサイズを出力します。

SQL> select bh.INST_ID
  2       , bh.CON_ID
  3       -- free 以外はすべて使用中としてマークします。
  4       , decode (bh.STATUS
  5           , 'free', 'buffer cache free'
  6           , 'buffer cache use'
  7         ) as STATUS
  8       -- ブロック数と表領域のブロックサイズをかけることで、バイト換算します。
  9       , round(count(1) * ct.BLOCK_SIZE / 1024 / 1024,1) as MBYTES
 10    from ( select vtin.NAME as TABLESPACE_NAME
 11                , bhin.*
 12             from GV$BH bhin
 13                , GV$TABLESPACE vtin
 14            where bhin.INST_ID = vtin.INST_ID
 15              -- V$BH 表の TS# を使用して表領域を特定しておきます。
 16              and bhin.TS# = vtin.TS#
 17              and bhin.CON_ID = vtin.CON_ID
 18         ) bh
 19       , ( select FILE_NAME,FILE_ID,TABLESPACE_NAME,BYTES,BLOCKS,STATUS,RELATIVE_FNO,AUTOEXTENSIBLE,MAXBYTES,MAXBLOCKS,INCREMENT_BY,USER_BYTES,USER_BLOCKS,CON_ID from CDB_DATA_FILES
 20           union
 21           select FILE_NAME,FILE_ID,TABLESPACE_NAME,BYTES,BLOCKS,STATUS,RELATIVE_FNO,AUTOEXTENSIBLE,MAXBYTES,MAXBLOCKS,INCREMENT_BY,USER_BYTES,USER_BLOCKS,CON_ID from CDB_TEMP_FILES
 22         ) cf
 23       , CDB_TABLESPACES ct
 24   where bh.CON_ID = cf.CON_ID
 25     and cf.CON_ID = ct.CON_ID
 26     and cf.FILE_ID = bh.FILE#
 27     and cf.TABLESPACE_NAME = ct.TABLESPACE_NAME
 28     and ct.TABLESPACE_NAME = bh.TABLESPACE_NAME
 29   group by bh.INST_ID
 30       , bh.CON_ID
 31       , decode (bh.STATUS
 32           , 'free', 'buffer cache free'
 33           , 'buffer cache use'
 34         )
 35       , ct.BLOCK_SIZE
 36   order by 1,2,3
 37  ;

   INST_ID     CON_ID STATUS                MBYTES
---------- ---------- ----------------- ----------
         1          1 buffer cache free          0
         1          1 buffer cache use        90.5
         1          3 buffer cache use       130.2
         1          4 buffer cache use        20.3

バッファキャッシュ以外のプール状況出力

バッファキャッシュ以外については、V$SGASTATにてPDBごとに集計可能です。

SQL> select vs.INST_ID
  2       , vc.NAME as CON_NAME
  3       , nvl(vs.POOL, vs.NAME) as POOL
  4       -- free memory か使用中かを判別します。
  5       , decode( vs.NAME
  6           , 'free memory', 'free memory'
  7           , 'used memory'
  8         ) as STATUS
  9       , ROUND(sum(vs.BYTES) / 1024 / 1024,1) as MBYTES
 10    from GV$SGASTAT vs
 11       , ( select INST_ID
 12                , CON_ID
 13                , NAME
 14             from GV$CONTAINERS
 15           union
 16           -- CDB 全体のコンテナ ID を付与する
 17           select INST_ID
 18                , 0
 19                , 'ENTIRE CDB'
 20             from GV$CONTAINERS
 21            group by INST_ID
 22         ) vc
 23   where vs.CON_ID = vc.CON_ID
 24     and vs.INST_ID = vc.INST_ID
 25   group by vs.INST_ID
 26       , vc.NAME
 27       , nvl(vs.POOL, vs.NAME)
 28       , decode (vs.NAME
 29           , 'free memory', 'free memory'
 30           , 'used memory'
 31         )
 32   order by vs.INST_ID
 33       , CON_NAME
 34       , POOL
 35       , STATUS;

   INST_ID CON_NAME                       POOL                       STATUS          MBYTES
---------- ------------------------------ -------------------------- ----------- ----------
         1 CDB$ROOT                       large pool                 used memory        1.8
         1 CDB$ROOT                       shared pool                used memory      306.1
         1 CDB$ROOT                       streams pool               used memory         .6
         1 ENTIRE CDB                     buffer_cache               used memory        256
         1 ENTIRE CDB                     fixed_sga                  used memory        2.8
         1 ENTIRE CDB                     java pool                  free memory         16
         1 ENTIRE CDB                     large pool                 free memory       30.2
         1 ENTIRE CDB                     log_buffer                 used memory       13.2
         1 ENTIRE CDB                     shared pool                free memory       58.8
         1 ENTIRE CDB                     shared_io_pool             used memory         32
         1 ENTIRE CDB                     streams pool               free memory       14.7
         1 PDB$SEED                       shared pool                used memory        6.3
         1 PDBORCL                        shared pool                used memory        140
         1 PDBORCL                        streams pool               used memory         .7