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ビュー
  

 
 
性能調査が加速する日本エクセムのMaxGauge