enq: TX – allocate ITL entry

目次

概要

ITL(Interested Transaction List)は、特定のブロックを変更時のトランザクションのリストです。ブロックヘッダーで管理します。
ブロックを変更するすべてのトランザクションは、ブロックヘッダーのITLエントリにトランザクション情報を登録します。
ITLの最大値(MAXTRANS)を超えるか、またはブロック内の空き容量が不足してエントリを登録出来ない場合、プロセスは、既存のプロセスが確保しているITLを共有モードで獲得するために待機 します。

Oracleは、次のような場合にenq : TX – allocate ITL entryを獲得します。
表を作成するときに設定する3つの属性が本待機現象に関わります。

  • INITRANS :ブロック・ヘッダーごとに、いくつかのITLエントリを事前に確保するかを指定します。たとえば、INITRANSの値に10を設定すれば、10個の同時トランザクションのためのスペースが用意されます。
  • MAXTRANS :最大いくつのITLエントリを許可するかを指定します。たとえば、MAXTRANSの値 に50を設定すれば、最大50個の同時トランザクションを可能にします。
  • PCTFREE :最初のブロックはINITRANSに指定されている値でITLエントリが確保されますが、同時トランザクションが増加すると、PCTFREEで確保された領域内でMAXTRANSは拡張されます。

もし、同時トランザクションが多いと予想される表の場合、INITRANSを十分に確保することを 推奨します。INITRANSを十分に確保すれば、動的にスペースを確保するためのオーバーヘッドが減り、ITLエントリ不足によるTXロックの競合が発生しにくくなります。

待機パラメータと待機時間

待機パラメータ

enq: TX – allocate ITL entry待機イベントの待機パラメータは以下の通りです。

  • P1 : エンキュー情報
  • P2 : usn < < 16 | slot
  • P3 :シーケンス

待機時間

最大3秒。もしTXロックを取得できない場合、取得するまで待機します。

チェックポイントとソリューション

INITTRANSの見直し

適切なINITRANSの値で表を作成することが、ITL容量不足によるTXロック競合現象を解決するための一般的な方法です。

STATISTIC_NAME = ‘ITL waits’の条件でV$SEGMENT_STATISTICSビューを参照すると、ITL不足 による競合が問題が多く発生するセグメントを確認することができます。