
latch free - 日本エクセム株式会社 Oracle待機イベント情報
目次[非表示]
- 1.基本情報
- 2.待機パラメータと待機時間
- 3.チェックポイントとソリューション
- 4.豆知識
基本情報
プロセスが Willing-to-waitモードで _SPIN_COUNT回スピンを実行してからも latch獲得に失敗して、sleepするということを意味します。
OracleはSGAの構造を保護するためにlatchを使用します。 SGAは、ローカルインスタンス単位で存在するので、ラッチは、そのインスタンスでのみ観察可能です。 latchの獲得方法は、Willing-to-waitとNo-Wait方式の2つがあります。
Willing-to-wait方式は、ラッチを獲得することができるまで待機するようにSpin方式とPosting方式に分けられます。 Spin方式はlatchを獲得しようとするプロセスがlatchを獲得するのに失敗した場合、適切な回数だけループを回し、ラッチを再取得しようとするこの試みを_SPIN_COUNT(デフォルト2000)パラメータの値に応じて繰り返し(スピン)しlatch獲得を試みます。 Postingように動作するlatchはSpin方式に比べて長時間待機するlatchで先行プロセスがlatchを終了するまで、wait listで待機している方式です。ここで注意する点は、wait listを使用するとしても順序が保証されません。 Posting方式を使用する代表的なlatchはshared pool latchとlibrary cache latchがあります。
ほとんどのラッチ獲得はWilling-to-waitモードを使用しますが、次のような特殊な場合には、No-waitモードを使用します。現在、他のラッチを保有しているプロセスが現在保有しているラッチの中で最も最近獲得したラッチよりも低いか、同じレベルのラッチを獲得しようとするときは、No-waitモードでの獲得を試みます。
Willing-to-waitとNo-Waitの両方を使用する理由は、latchのデッドロックを防止するためです。最近獲得したlatchのlevelと同じか低いレベルのlatchを獲得したときには、No-waitモードに要求して、最新の獲得したlatchのlevelより高いlevelのlatchを獲得しようとするときは、Willing-to-waitモードに要求します。 latchのデッドロック発生時ORA-600エラーが発生します。
latchは、基本的にexclusiveモードを使用して、瞬間に1つのプロセスだけがlatchを占有することができますが、特定のlatchはsharedモードで占有することもできます。 9i以上ではcache buffers chains latchの場合、読み取り操作のときにsharedモードを使用します。
9iまではすべてのlatch待機現象がlatch freeで表示されたましたが10gからの重要なlatchは、別の待機イベントで定義されました。 latch名前を直接知ることができないlatch free待機イベントの場合には、P2の値がlatch#なので、この値をV$LATCHNAME.LATCH#と結合するとlatch名前を得ることができます。
10gから分離されたlatchイベントを確認するには、次のクエリで確認することができます。
待機パラメータと待機時間
待機パラメータ
待機時間
イベントの待機時間は指数関数(exponential)的に増加します。
チェックポイントとソリューション
latch freeイベントの発生理由と解決策は、latchの種類に応じて異なります。個別latch freeイベントの説明を参照してください。