2019.02.21
DBMS SHARED POOL.KEEP
目次
概要
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ビュー