Select For UPDATE NOWAIT
テーブル上で20プロセスが並行して実行されます
以下のエラーは、20のうち4つのプロセスによって返されます(16プロセスは成功)
SQL_UPDATE_ERROR- : SQL update error ORA-02049: timeout: distributed transaction
waiting for lock ORA-02063
Oracleには、データベースリンクを使用してテーブルに接続できる数を定義するいくつかのパラメーターがありますか?
ステップの順序は選択です
これは必ずしもトランザクション数ではなく、タイムアウトです。パラメータdistrubuted_lock_timeout
はデフォルトで60秒に設定されています。このパラメーターの目的は、他の何かがその行で作業を実行している間、分散トランザクションが長時間実行待機状態になるのを回避することです。トランザクションは60秒間待機してから、Oracleによって強制終了されます。
このパラメーターは(インスタンスの再起動が必要です)必要に応じて(秒単位で)変更できます。
解決策を得た。 INITRANSの値を増やし、役立つインデックスを再構築します。 DB_LINKを介してアクセスされたテーブルのINITRANS = 1は、ITL待機が200を超え、行ロック待機が100000を超えます。
現在、INITRANS値は20に増加しており、その結果、分散/同時トランザクションの行ロック待機はありません。