catch-img

DBMS SHARED POOL.KEEP - 日本エクセム株式会社 Oracle 技術情報


目次[非表示]

  1. 1.基本情報
  2. 2.使用例
    1. 2.1.
    2. 2.2.実行計画のKeep
  3. 3.関連情報


基本情報

 Procedure、Package、Sequence、Trigger、SQL Cursorと同じLibrary Cache ObjectをShared PoolにKeepする機能を提供します。KeepされたLCOは、次のような特徴を持ちます。

1.LCOのKeep情報が設定され、V$ DB_OBJECT_CACHE.KEPTカラムが「YES」の値を持つことが確認できます。
  V$ DB_OBJECT_CACHEビューはLCOのリストを表しX$ KGLOBビューをベーステーブルとします。
2.KeepされたLCOはAge Outされず、ALTER SYSTEM FLUSH SHARED POOLコマンドでもFlushされません。
3.ただし、KeepされたLCOもInvalidationメカニズムは同じです。

DBMS_SHARED_POOL.UNKEEPプロシージャを使用すると、KeepされたLCOを解除することができる。


使用例

Syntaxは以下の通りです。

dbms_shared_pool.keep(name IN VARCHAR2、flag IN CHAR DEFAULT'P');

Parameterの意味は次のとおりです。

Flag	Description	     Name
C	cursor	       Address,Hashvalue
JC	java class	     -
JD	java shared data     -
JR	java resource	     -
JS	java source	     -
P	procedure	   Procedure Name
Q	sequence	   Sequence Name
R	trigger	       Trigger Name
T	type	       Type Name


-- Get address and hash_value of SQL statement
select address, hash_value from v$sql where sql_text like 'your query to keep';
==> 00000000858CA2B0      2239673969

--  Keep SQL Cursor
exec dbms_shared_pool.keep('00000000858CA2B0, 2239673969','C');
 
-- Create Procedure
CREATE OR REPLACE PROCEDURE proc_test IS
BEGIN
   NULL;
END proc_test;
/

-- Keep Procedure
exec dbms_shared_pool.keep('proc_test', 'P');

-- Identify which objects are kept
select * from v$db_object_cache where kept = 'YES';


実行計画のKeep

 SQL CursorをKeepしても、実行プランがKeepされないので、Age OutやFlushによるInvalidationを防ぐことはできない。


関連情報

1.V$ DB_OBJECT_CACHEビュー


CONTACT

他社に頼らず自社でデータベースを監視・運用をしませんか?
MaxGaugeがサポートします

お役立ち資料は
こちらから

不明点がある方は、
こちらからお問い合わせください

お電話でのお問い合わせはこちら

平日 10時~18時

人気記事ランキング

タグ一覧