奇妙なデッドロックについて疑問に思っています。他のすべてのコンポーネントを確認した後、Oracle11.2のINITRANSの問題であると考えています。
ここで、3つの質問が発生しました。
ブロックがどれだけいっぱいかを分析する方法はありますか?
私のデータベースはしばらく前に最大テーブルスペースサイズに達し、挿入を拒否し始めました。次に別のデータファイルを追加しましたが、これはほぼすべてのスペースが使い果たされた場合にのみ大きくなります。私のPCT_USEDは96%です。すべてのデータブロックが完全に詰め込まれ、INITRANSデッドロックが発生する可能性があるという私の仮定は正しいですか?
デッドロックトレースでINITRANSの問題を確認する方法はありますか?
部分的な回答にも満足しています。
Initransは、テーブルの同じブロックへの同時挿入にとって最も重要です。通常、これはブロックヘッダーの競合があるときに認識されます。ブロックに十分な空き領域がある限り、リストはブロックの空き領域で拡大できます。したがって、一部のテーブルで、テーブルの同じ端にデータを挿入する多数の同時ジョブがあることがわかっている場合は、INITRANSを同時ジョブの数と同様の値に設定すると便利です。
pct_usedは、ブロックが4%のスペースを解放するとすぐに、そのブロックが新しい行を受け入れるために空きリストに到達することを意味します。
pct_freeは、ブロック内の空き領域がpct_freeを下回るとすぐに、行が拡大する可能性のある更新用の領域を維持するために、ブロックが新しい行を受け入れなくなることを意味します。
テーブル統計は、AVG_SPACE、AVG_ROW_LENのような統計を示しています。