
gc current split - 日本エクセム株式会社 Oracle待機イベント情報
目次[非表示]
- 1.基本情報
- 2.待機パラメータと待機時間
- 3.チェックポイントとソリューション
基本情報
gc current splitイベントはgc cr/current requestイベントのFixed-upイベントで、ホルダーのノードがインデックスブロックを送信する過程で、インデックスの分割(Index Split)が発生したことを意味します。gc cr/current requestイベントがgc current splitイベントに変更された流れは、以下の通りです。
リクエストノードのユーザプロセスが特定のインデックスブロックを読もうとします。
gc current splitイベントは、ルートノード、ブランチノード、リーフノードのブロックに関係なく、そのブロックがインデックスの分割のために、ブロッキングされている状況では、共通して発生することができます。特定のリーフ・ノードを分割する過程では、その親ノードのブロックも変更が禁止されるからです。
gc current splitイベントと関連しているもう一つの待機イベントはenq:TX – index contentionイベントです。テーブルの特定の行を変更しようとするプロセスは、もし関連インデックスブロックが他のプロセスによって分割されている場合、インデックスの分割が完了するまで待たなければなりません。この時、待機するイベントがenq:TX – index contentionイベントです。
次の結果は、複数のプロセスによる同時INSERT操作によるインデックスの分割が頻繁に発生する作業の下でSQL Traceを利用して、特定のプロセスの待機現象をキャプチャしたものでgc current splitイベントとenq:TX – index contentionイベントが観察されていることを確認することができます。
待機パラメータと待機時間
待機パラメータ
gc current splitイベントなどFixed-upイベントは、P1、P2、P3の値が別途付与されず、Placeholderイベント(ここではgc cr requestイベント)と同じ値を持つものと解釈すればよい。
待機時間
-
チェックポイントとソリューション
gc current splitの解決
Fixed-upイベントにgc current splitイベントがたくさん目撃されるということは、同じテーブルのブロックのインデックス分割が過度に発生するということを意味します。このイベントの待機を解消する手法は、enq:TX – index contentionイベントを解消する手法と同じです。
シーケンス値を使用して、インデックスキーを生成する場合には、一番右のリーフブロックに挿入が集中して、インデックス分割による競合が多く発生します。この場合には、次のような手法を適用することができます。