catch-img

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


 SQLチューニングのためには、そのSQLがどのように動いていて、データベースにどのように影響しているのか、を把握する必要があります。『MaxGauge』があれば簡単に状況が把握でき、適切なSQLチューニングができるようになります。

『MaxGauge』の資料はこちらから。


基本情報

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


 SQLチューニングのためには、そのSQLがどのように動いていて、データベースにどのように影響しているのか、を把握する必要があります。『MaxGauge』があれば簡単に状況が把握でき、適切なSQLチューニングができるようになります。

『MaxGauge』の資料はこちらから。


CONTACT

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

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

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

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

平日 10時~18時

人気記事ランキング

タグ一覧