6

ITL (Interested Transaction List) デッドロックと思われるものを日常的に引き起こしている Oracle DB パッケージがあります。トレース ファイルの関連部分を以下に示します。

Deadlock graph:
                       ---------Blocker(s)--------  ---------Waiter(s)---------
Resource Name          process session holds waits  process session holds waits
TM-0000cb52-00000000        22     131           S       23     143          SS
TM-0000ceec-00000000        23     143    SX             32     138    SX   SSX
TM-0000cb52-00000000        30     138    SX             22     131           S
session 131: DID 0001-0016-00000D1C session 143: DID 0001-0017-000055D5
session 143: DID 0001-0017-000055D5 session 138: DID 0001-001E-000067A0
session 138: DID 0001-001E-000067A0 session 131: DID 0001-0016-00000D1C
Rows waited on:
Session 143: no row
Session 138: no row
Session 131: no row

このテーブルにはビットマップ インデックスがないため、それが原因ではありません。私が知る限り、「待機中の行」と待機列の「S」がないことは、これが ITL デッドロックであることを示している可能性があります。また、テーブルは頻繁に書き込まれるため (約 8 つの挿入または更新が同時に行われ、1 分間に 240 回も行われる)、ITL デッドロックが発生する可能性が高いようです。

テーブルの INITRANS パラメータとそのインデックスを 100 に増やし、テーブルの PCT_FREE を 10 から 20 に増やしました (その後、インデックスを再構築しました) が、デッドロックはまだ発生しています。デッドロックは更新中に最も頻繁に発生するようですが、それは偶然かもしれません。私はそれを数回追跡しただけです.

私の質問は 2 つあります
。1) これは実際に ITL デッドロックですか?
2) ITL デッドロックの場合、それを回避するために他に何ができますか?


これは ITL デッドロックの問題ではなく、インデックスのない外部キーの問題であることが判明しました。dpbradley の回答のおかげでこれを発見しました。これにより、ITL の問題ではないという事実がわかり、「行がない」デッドロックの他の原因が何であるかを調べるようになりました。

4

2 に答える 2

5

ITL のプレッシャーを最もよく示すのは、次のパフォーマンス ビューです。

select event, total_waits, time_waited, average_wait
 from v$system_event
 where event like 'enq: TX%'
 order by 2 desc;

TX 競合待機を示し、

select OBJECT_NAME, SUBOBJECT_NAME, TABLESPACE_NAME, 
       OBJECT_TYPE, STATISTIC_NAME, VALUE
  from v$segment_statistics 
  where statistic_name = 'ITL waits'
  and value > 0
  order by value desc;

関連するテーブルとインデックスを示します。

(すべてのv$ビューと同様に、結果はインスタンスが開始された時点のものです。)

これにより、実際に ITL 待機があることが示される場合は、INITRANS および PCTFREE パラメーターが主要なノブになります (ただし、INITRANS = 100 は私にはかなり高く聞こえ、これらはスペースを消費します)。

ITL 待機が問題にならない場合は、アプリケーション コードを調べる必要があります。

于 2010-05-25T13:58:48.470 に答える