対応バージョン

Oracle Database 12.1

更新履歴

日付更新概要
2016/02/25記事公開

PDBごとのセッション数使用率を出力するSQLについて記載します。
CDB構成(コンテナ構成)を選択した場合に、初期化パラメータのSESSIONSにより、PDBごとに使用可能なセッションの上限を指定することが出来ます。
その際にEnterprise ManagerにPDBごとにセッション数使用率を監視できるメトリックがなかったため、PDBのセッション使用率を確認できるSQLを作成しましたので、その内容を記載します。
セッション数の使用状況についてはv$resource_limit動的ビューを使用して確認可能ですが、12cR1におけるv$resource_limitについてはCDB全体の確認のみ可能となっています。

PDBごとのセッション数使用率について

PDBに指定できるセッション数

CDBの初期化パラメータに指定したSESSIONSを超えない範囲でPDBのSESSIONSを制限することが出来ます。

CDBのSESSIONSに指定されている値は、PDBのSESSIONS合計値ではないことに注意してください。
指定可能な範囲はCDBのSESSIONS値までであり、PDBのSESSIONS合計値がCDBのSESSIONS値を超えていても問題ありません。

以下マニュアルより、SESSIONSのデフォルトはPROCESSES * 1.5 + 22となります。

https://docs.oracle.com/cd/E57425_01/121/REFRN/GUID-52804B5A-164F-44F3-8980-F2593B58D807.htm
Oracle Databaseリファレンス
12cリリース1 (12.1)
B71292-09

PDBごとの最大セッション数の変更

以下にPDBのSESSIONSを150に設定する例を示します。
CDB名:orcl PDB名:pdborcl

# su - oracle
$ sqlplus / as sysdba
-- CDB の最大セッション数を確認します。
SQL> show parameter sessions
-- pdborcl にコンテナを変更します。
SQL> alter session set container=pdborcl;
-- 現在のコンテナを確認します。
SQL> set line 120 pages 1000 trim on
SQL> select CON_ID,DBID,NAME,OPEN_MODE from v$pdbs;
-- pdborcl の最大セッション数を確認します。
SQL> show parameter sessions
-- pdborcl の最大セッション数を変更します。
SQL> alter system set sessions = 150 scope=both;
-- pdborcl の変更後最大セッション数を確認します。
SQL> show parameter sessions
SQL> exit

PDBごとのセッション数使用率の確認

以下のSQLでセッション数の使用率を確認します。

$ sqlplus / as sysdba
-- pdborcl にコンテナを変更します。
SQL> alter session set container=pdborcl;
-- 現在のコンテナを確認します。
SQL> set line 120 pages 1000 trim on
SQL> select CON_ID,DBID,NAME,OPEN_MODE from v$pdbs;
-- pdborcl の最大セッション数を確認します。
SQL> show parameter sessions
-- pdborcl の現在のセッション数を確認します。
SQL> select a.inst_id
   2      , a.con_id
   3      , count(1) num_session
   4   from GV$SESSION a
   5      , V$PDBS b
   6  where a.con_id = b.con_id
   7  group by a.inst_id,a.con_id;
-- pdborcl のセッション使用率を確認します。
SQL> select a.inst_id
   2      , 100 * (count(1) / c.value) session_ratio
   3   from GV$SESSION a
   4      , V$PDBS b
   5      , GV$PARAMETER c
   6  where a.con_id = b.con_id
   7    and c.con_id = b.con_id
   8    and a.inst_id = c.inst_id
   9    and c.name = 'sessions'
  10  group by a.inst_id
  11      , c.value
  12  order by 1;