
library cache pin - 日本エクセム株式会社 Oracle待機イベント情報
目次[非表示]
- 1.基本情報
- 2.待機パラメータと待機時間
- 3.チェックポイントとソリューション
- 3.1.業務時間中DDLの実行を避ける
- 4.豆知識
- 4.1.Library Cacheの構造
- 4.2.SQLの実行順序
基本情報
library cache pinは、Library Cacheオブジェクトの実行や変更時にlibrary cache object(LCO)について取得するロックです。library cache pinを獲得する過程で競合が発生した場合library cache pinイベントを待機します。library cache pinイベントのP1 = handle address、P2 = lock address、P3 = mode * 100 + namespaceでどのオブジェクトに対してどのようなモードでロックを獲得する過程で競合が発生したか把握することができます。library cache pinはlibrary cache lockを獲得した後、library cacheオブジェクトに対して追加の作業が必要なときに獲得することになります。たとえば、特定のプロシージャやSQL文を実行しようとするプロセッサは、library cache lockをSharedモードで獲得した後で、library cache pinをSharedモードで獲得しなければなりません。プロシージャをコンパイル(alter procedure … compile …)する場合には、library cache pinをExclusiveに獲得しなければなりません。ピン(pin)という用語の意味は、LCOにピンを差し込むことで、ピンが差し込まれている間、LCOの値が変動しないように保証される役割をさします。実際には、ハード解析が発生した場合、ハード解析が行われる間、対応するSQLカーソルのlibrary cache pinをExclusiveに獲得するというものです。
一般的に、現在の多く使用されるオブジェクトのDDL(テーブルの変更、ビュー、プロシージャのコンパイルなど)コマンドを実行する場合library cache pin待機イベントが多く発生することになります。したがって業務時間中にオブジェクトの変更はなるべくご遠慮しなければなりません。もし、そのイベントが広範囲に発生した場合、shared poolのチューニングが必要になることもあります。そのイベントが発生した場合は、以下のSQLを実行して、ピンを占有しているセッションとモードを確認することができます。
もし実行結果が上記通りであるならば、8回のセッションが25回のセッションのlibrary cache pin待機のホルダー(holder)セッションであることを示します。また、8回のセッションは、sharedモード(2)でピンを所有しており、25回のセッションは、exclusiveモード(3)でピンを所有するために待機しています。
待機パラメータと待機時間
待機パラメータ
library cache pin待機イベントは、待機パラメータを使用していません。
オラクル7.0から8.1.7までの10* Mode+ Namespaceで表現され、Oracleの9.0から9.2までは100* Mode+ Namespaceに表現されます。Namespace部分は番号で表示され、番号に対応する名前空間は、次のとおりです。
0 |
Sql Area |
1 |
Table / Procedure / Function / Package Header |
2 |
Package Body |
3 |
Trigger |
4 |
Index |
5 |
Cluster |
6 |
Object |
7 |
Pipe |
13 |
Java Source |
14 |
Java Resource |
32 |
Java Data |
待機時間
PMONプロセスは、1秒まで待機し、他のプロセスは、3秒まで待機します。この待機時間後にピンを獲得していない場合、繰り返し待機します。
チェックポイントとソリューション
業務時間中DDLの実行を避ける
library cache lock待機による性能低下現象は、ほとんどの不適切なDDL(create、alter、compile、flushなど)によって発生します。したがって、トランザクションが旺盛なシステムに対してDDLを実行するときは、この内容を十分に考慮した後に実行するようにしなければなりません。たまにハード解析が盛んなシステムでshared poolメモリ枯渇を避けるために(ORA-4031エラーを回避するために)flushを実行する場合がありますが、システムに悪影響を与える場合が多くあります。
豆知識
Library Cacheの構造
latch:library cache#Library Cache構造を参照してください。
SQLの実行順序
latch:library cache#SQLの実行を参照してください。