168 DBMS_SHARED_POOL
DBMS_SHARED_POOL
パッケージは、共有プールへのアクセスを提供し、この共有プールは、カーソルとPL/SQLオブジェクトが格納されている共有メモリー領域です。DBMS_SHARED_POOL
によって、共有プール内のオブジェクトのサイズを表示したり、メモリーの断片化を減らすためにオブジェクトを保存または非保存としてマークできます。
この章のトピックは、次のとおりです:
168.1 DBMS_SHARED_POOLの概要
ここで提供されるプロシージャは、大規模なPL/SQLオブジェクトのロード時に役立ちます。大規模なPL/SQLオブジェクトのロード時には、大量の小規模オブジェクトを共有プールから期限切れとして削除して空き領域を用意する必要があるため(メモリー断片化のため)、ユーザーの応答時間に影響を与えます。場合によっては、ラージ・オブジェクトをロードするためのメモリーが不足している場合があります。
DBMS_SHARED_POOL
は、頻繁に実行するトリガーに対しても有効です。コンパイルしたトリガーを共有プールで頻繁に使用する表に保管できます。
さらに、DBMS_SHARED_POOL
は順序もサポートしています。順序番号は、順序が期限切れで共有プールから削除されると失われます。DBMS_SHARED_POOL
は、共有プールに順序を保存し、順序番号の損失を防止するのに役立ちます。
168.2 DBMS_SHARED_POOLの操作上のノート
DBMS_SHARED_POOLを作成するには、DBMSPOOL.SQLスクリプトを実行します。DBMSPOOL.SQLの実行後には、自動的にPRVTPOOL.PLBスクリプトが実行されます。これらのスクリプトは、通常のデータベース作成の一環では実行されません。
168.3 DBMS_SHARED_POOLサブプログラムの要約
この表は、DBMS_SHARED_POOL
サブプログラムを示し、簡単に説明しています。
表168-1 DBMS_SHARED_POOLパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
共有プールについて、異常終了を要求するしきい値を設定します。 |
|
共有プールにオブジェクトを保存します。 |
|
ライブラリ・キャッシュ・オブジェクトをホット・オブジェクトとしてマーク付けします。 |
|
名前付きオブジェクトまたはオブジェクトの指定したヒープをパージします。 |
|
共有プールにあるオブジェクトで、指定サイズより大きいオブジェクトを表示します。 |
|
指定オブジェクトを解放します。 |
|
ライブラリ・キャッシュ・オブジェクトのホット・オブジェクトとしてのマークを解除します。 |
168.3.1 ABORTED_REQUEST_THRESHOLDプロシージャ
このプロシージャは、共有プールについて、異常終了を要求するしきい値を設定します。
構文
DBMS_SHARED_POOL.ABORTED_REQUEST_THRESHOLD ( threshold_size NUMBER);
パラメータ
表168-2 ABORTED_REQUEST_THRESHOLDプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
共有プール内で確保解除されたメモリー(解放されたメモリーではない)を解放しないための要求サイズ(バイト単位)。 |
例外
しきい値が有効な範囲内にない場合は、例外が発生します。
使用上のノート
通常、要求が空きリストで満たされない場合、RDBMSは、LRUリストからオブジェクトを解放して要求を満たすことができるかを定期的にチェックし、メモリーを再要求しようとします。このステップの完了後、RDBMSは、'ALTER
SYSTEM
FLUSH
SHARED_POOL
'とほぼ同等の内容を実行します。
これは、システム上のすべてのユーザーに影響を与えるため、このプロシージャは、その影響をthresh_hold
サイズを超える共有メモリーの断片検索に失敗した処理にローカライズします。このユーザーは、LRUリストを検索しなくても、'メモリー不足'エラーとなります。
168.3.2 KEEPプロシージャ
このプロシージャは、共有プールにオブジェクトを保存します。オブジェクトが一度共有プールに保存されると、期間切れ削除の対象となりません。このことは、頻繁に使用されるラージ・オブジェクトに役立つ場合があります。ラージ・オブジェクトを共有プールに配置する場合、十分な連続領域を作成するために複数のオブジェクトを削除する必要がある場合があります。
構文
DBMS_SHARED_POOL.KEEP ( name VARCHAR2, flag CHAR DEFAULT 'P');
DBMS_SHARED_POOL.KEEP ( schema VARCHAR2, objname VARCHAR2, namespace NUMBER, heaps NUMBER, edition_name VARCHAR2 DEFAULT NULL);
DBMS_SHARED_POOL.KEEP ( hash VARCHAR2, namespace NUMBER, heaps NUMBER);
パラメータ
表168-3 KEEPプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
保持するオブジェクトの名前。 |
|
共有プール内に保持するオブジェクトの種類を示す文字列。文字列の大文字と小文字は区別されません。このパラメータは省略可能です。 パラメータを指定しないと、パッケージは、最初のパラメータをパッケージ、プロシージャまたはファンクションの名前とみなして名前を解決します。
|
|
オブジェクトが属するユーザー名またはスキーマ。 |
|
保持するオブジェクトの名前。 |
|
オブジェクトの検索範囲となるライブラリ・キャッシュ・ネームスペースを示す数。 |
|
保持するヒープ。たとえば、ヒープ0およびヒープ6を保持する場合。 |
|
ターゲット・オブジェクトが存在するエディションの名前。このパラメータは省略可能です。 |
|
オブジェクトの16バイトのハッシュ値。 |
例外
指定されたオブジェクトが見つからない場合は、例外が発生します。
使用上のノート
オブジェクトは2種類あります。
-
名前で指定するPL/SQLオブジェクト、トリガー、シーケンス、タイプおよびJavaオブジェクト。
-
2つの番号(共有プール内の位置を示す)で指定するSQLカーソル・オブジェクト
たとえば:
DBMS_SHARED_POOL.KEEP('scott.hispackage')
これは、SCOTT
が所有するパッケージHISPACKAGE
を保存します。PL/SQLオブジェクトの名前は、SQLのオブジェクトの命名規則に従っています(たとえば、デリミタ付き識別子やマルチバイトの名前などが可能です)。カーソルは、DBMS_SHARED_POOL
.KEEP('0034CDFF, 20348871','C')
によって保存でき、0034CDFF
はADDRESS
、20348871
はHASH_VALUE
です。最初の8文字は16進数の完全なアドレスである必要があることに注意してください。
168.3.3 MARKHOTプロシージャ
このプロシージャは、ライブラリ・キャッシュ・オブジェクトをホット・オブジェクトとしてマーク付けします。
構文
DBMS_SHARED_POOL.MARKHOT ( schema VARCHAR2, objname VARCHAR2, namespace NUMBER DEFAULT 1, global BOOLEAN DEFAULT TRUE, edition_name VARCHAR2 DEFAULT NULL); DBMS_SHARED_POOL.MARKHOT ( hash VARCHAR2, namespace NUMBER DEFAULT 1, global BOOLEAN DEFAULT TRUE);
パラメータ
表168-4 MARKHOTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクトが属するユーザー名またはスキーマ。 |
|
オブジェクト名 |
|
オブジェクトの検索範囲となるライブラリ・キャッシュ・ネームスペースを示す数。 |
|
|
|
オブジェクトの16バイトのハッシュ値。 |
|
ターゲット・オブジェクトが存在するエディションの名前を示します。 このパラメータは省略可能です。 |
例外
ORA-06502
: 不適切な入力が原因で指定したオブジェクトを検出できない場合は例外が発生します。
ORA-04043
: 指定したオブジェクトを検出できない場合は例外が発生します(不正なネームスペースまたはハッシュ入力)。
使用上のノート
パッケージまたはタイプの仕様にホットまたは非ホットのマークが付いている場合は、対応するパッケージまたはタイプの本体に暗黙的にホットまたは非ホットのマークが付きます。
V$DB_OBJECT_CACHE.PROPERTY
を調べて、オブジェクトにホットのマークが付いているかどうかを確認できます。PROPERTY
の値は次のとおりです。
HOTCOPYnnn
- 整数の識別子'nnn'が付いたホット・コピーのオブジェクト。たとえば、HOTCOPY5
、HOTCOPY94
、HOTCOPY125
などです。HOTCOPY
: 前述のものと同じですが識別子が不明ですHOT
: ホットのマークが付いている「ルート」kglオブジェクトNULL
: 通常のオブジェクト
168.3.4 PURGEプロシージャ
このプロシージャは、名前付きオブジェクトまたはオブジェクトの指定したヒープをパージします。
構文
DBMS_SHARED_POOL.PURGE ( name VARCHAR2, flag CHAR DEFAULT 'P', heaps NUMBER DEFAULT 1); DBMS_SHARED_POOL.PURGE ( schema VARCHAR2, objname VARCHAR2, namespace NUMBER, heaps NUMBER, edition_name VARCHAR2 DEFAULT NULL); DBMS_SHARED_POOL.PURGE ( hash VARCHAR2, namespace NUMBER, heaps NUMBER);
パラメータ
表168-5 PURGEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パージするオブジェクトの名前。 この識別子は、アドレスと、 現在、 |
|
共有プールからパージするオブジェクトの種類を示す文字列。文字列の大文字と小文字は区別されません。このパラメータは省略可能です。 パラメータを指定しないと、パッケージは、最初のパラメータをパッケージ、プロシージャまたはファンクションの名前とみなして名前を解決します。
|
|
パージするヒープ。たとえば、ヒープ0およびヒープ6をパージする場合: 1<<0 | 1<<6 => 16進数0x41 => 10進数65であるため、ヒープ =>65を指定します。デフォルト値は |
|
オブジェクトが属するユーザー名またはスキーマ。 |
|
パージするオブジェクトの名前。 |
|
オブジェクトの検索範囲となるライブラリ・キャッシュ・ネームスペースを示す数。 |
|
オブジェクトの16バイトのハッシュ値。 |
|
ターゲット・オブジェクトが存在するエディションの名前。 このパラメータは省略可能です。 |
例外
ORA-6570
: 指定したオブジェクトを検出できない場合は例外が発生します。
ORA-6570
: 永続的に保持するようにマークされているオブジェクトはパージできません。
使用上のノート
KEEPプロシージャでサポートされているすべてのオブジェクトに対してPURGE
がサポートされています。
168.3.5 PURGE_ROW_CACHEプロシージャ
このプロシージャは、キャッシュIDによって識別された行キャッシュ、または選択されたキャッシュ内の特定のオブジェクトをパージします。
構文
DBMS_SHARED_POOL.PURGE_ROW_CACHE ( cacheid number, hash varchar2 DEFAULT null);
パラメータ
表168-6 PURGE_ROW_CACHEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
パージするキャッシュを示します。 |
hash |
指定されたキャッシュ内にある、パージするターゲット・オブジェクトのハッシュ値。デフォルト値(NULL )はキャッシュ全体をパージします。
|
168.3.6 SIZESプロシージャ
このプロシージャは、shared_pool
にあるオブジェクトで指定したサイズより大きいオブジェクトを表示します。オブジェクト名も表示され、KEEP
またはUNKEEP
いずれかのコールへの引数として使用できます。
構文
DBMS_SHARED_POOL.SIZES ( minsize NUMBER);
パラメータ
表168-7 SIZESプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクトを表示するために、共有プール内で占有する必要があるサイズ(KB単位)。 |
使用上のノート
このプロシージャの使用前に、SQLDBAまたはSQLPlus 'SET
SERVEROUTPUT
ON
SIZE
XXXXX'
コマンドを発行すると、結果が表示されます。
168.3.7 UNKEEPプロシージャ
このプロシージャは、指定のオブジェクトを解放します。
構文
DBMS_SHARED_POOL.UNKEEP ( name VARCHAR2, flag CHAR DEFAULT 'P');
DBMS_SHARED_POOL.UNKEEP ( schema VARCHAR2, objname VARCHAR2, namespace NUMBER, edition_name VARCHAR2 DEFAULT NULL);
DBMS_SHARED_POOL.UNKEEP ( hash VARCHAR2, namespace NUMBER);
警告:
このプロシージャは、将来自動メカニズムが実装されて不要になった場合サポートされなくなる可能性があります。
パラメータ
表168-8 UNKEEPプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
解放するオブジェクトの名前。 |
|
nameで識別される、保持するオブジェクトの種類を示す文字列。文字列の大文字と小文字は区別されません。 このパラメータは省略可能です。 パラメータを指定しないと、パッケージは、最初のパラメータをパッケージ、プロシージャまたはファンクションの名前とみなして名前を解決します。 |
|
オブジェクトが属するユーザー名またはスキーマ。 |
|
解放するオブジェクトの名前。 |
|
オブジェクトの検索範囲となるライブラリ・キャッシュ・ネームスペースを示す数。 |
|
ターゲット・オブジェクトが存在するエディションの名前。 このパラメータは省略可能です。 |
|
オブジェクトの16バイトのハッシュ値。 |
例外
ORA-06502
: 指定したオブジェクトを検出できない場合は例外が発生します。
168.3.8 UNMARKHOTプロシージャ
このプロシージャは、ライブラリ・キャッシュ・オブジェクトのホット・オブジェクトとしてのマークを解除します。
構文
DBMS_SHARED_POOL.UNMARKHOT ( schema VARCHAR2, objname VARCHAR2, namespace NUMBER DEFAULT 1, global BOOLEAN DEFAULT TRUE, edition_name VARCHAR2 DEFAULT NULL); DBMS_SHARED_POOL.UNMARKHOT ( hash VARCHAR2, namespace NUMBER DEFAULT 1, global BOOLEAN DEFAULT TRUE);
パラメータ
表168-9 UNMARKHOTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
オブジェクトが属するユーザー名またはスキーマ。 |
|
オブジェクト名 |
|
オブジェクトの検索範囲となるライブラリ・キャッシュ・ネームスペースを示す数。 |
|
このパラメータのデフォルト値は |
|
オブジェクトの16バイトのハッシュ値 |
|
ターゲット・オブジェクトが存在するエディションの名前を示します。 このパラメータは省略可能です。 |
例外
ORA-06502
: 不適切な入力が原因で指定したオブジェクトを検出できない場合は例外が発生します。
ORA-04043
: 指定したオブジェクトを検出できない場合は例外が発生します(不正なネームスペース、ハッシュ入力または存在しないオブジェクト)。
使用上のノート
パッケージまたはタイプの仕様にホットまたは非ホットのマークが付いている場合は、対応するパッケージまたはタイプの本体に暗黙的にホットまたは非ホットのマークが付きます。