sql >> データベース >  >> RDS >> Oracle

OracleITLデッドロックの特定と解決

    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待機が問題にならない場合は、アプリケーションコードを調べる必要があります。



    1. SELECT INTO OUTFILE権限は拒否されましたが、ユーザーはディレクトリに書き込むことができます

    2. GROUPBY式のヘルプではないOracleSQLGROUP BY

    3. ポリモーフィック関連の外部キー制約。これは良い解決策ですか?

    4. SQLServerでのトランザクションROLLBACKの使用