Home » database » Oracleメモリ管理機構latch(ラッチ)

Oracleメモリ管理機構latch(ラッチ)

Oracleメモリ管理機構latch(ラッチ)とは

システム・グローバル領域(SGA)のメモリー構造を保護するためにOracleで使用される下位レベルの内部ロックです

ラッチそのものをチューニングすることはできません

バッファ・キャッシュを使うためハッシュ・チェーンを探索したり変更を加えようとするセッションは、

必ずそのチェーンを管理しているcache buffers chainsラッチ(以降、CBCラッチ)を獲得しなければなりません

Oracleはバッファ・キャッシュを効率的に管理するためにハッシュ・チェーン構造を使います

ハッシュ・チェーンは共有プール内に存在し、Oracleの典型的なメモリー管理手法である

「バケット ->チェーン ->ヘッダー」の仕組みで構成されています

つまり検索結果から変換アルゴリズムによりバッファキャッシュ上の位置を指すハッシュキーが生成されるということです

データを取り出すためにはまず、CBCラッチを獲得しなければならないということです

このラッチを獲得する時に、競合が発生するとlatch:cache buffers chains待機イベントで待機します

非効率なSQLは、CBCラッチ競合を引き起こす最も重要な原因です

例えば、同時に複数のセッションが広い範囲の索引や広い範囲の表に対してスキャンする場合、CBCラッチ競合が多く発生します

ラッチの競合がホット・ブロックで発生しているのか、それとも非効率なSQLによって発生しているのか、

を判断するためにはSQLと対象オブジェクト(主にテーブル)を分析する必要があります

効率が悪いSQLが作成されていると判断できる根拠がある場合は、SQLをチューニングすることで問題を解決することができます

ホットブロックとは頻繁に使われるデータブロックということです

正常に使われホットブロックとなる場合もありますが、

データ構造の問題によりデータを追加更新するために確保しておく領域(PCTFREE)の割合が悪く、

このPCTFREE領域がいっぱいになり行連鎖が起こりホットブロックとなる場合が考えられます


PCTFREE:データを追加更新するために確保しておく領域の割合

PCTUSED:使用済領域のうち、データブロックごとに確保される最小限の割合、設定値を超えると新規データは追加されない