OS : Solaris
データベース: Informix
2 つのスレッドを持つプロセスがあります。
新しいトランザクションを処理し、DB INSERTS を実行するスレッド 1
既存のトランザクションを処理し、DB DELETES を実行するスレッド 2
問題
スレッド 1 は、テーブルに対して INSERTS (新しいトランザクションの追加) を継続的に実行しています。
スレッド 2 は、主キーに基づいて同じテーブルから DELETES (期限切れのトランザクションを削除する) を継続的に実行しています。
244
ページ/テーブルのロックが原因で発生しているInformix エラーが原因で、INSERTS が失敗しています。
おそらく、DELETE は行ロックではなくテーブル ロックを行っており、INSERT の動作を妨げています。
このデッドロックを防ぐ方法はありますか?
編集
別の手がかりを見つけました。244
エラーはクエリが原因ですSELECT
。
両方ともinsert
、delete
操作を実行するselect
前に、頻繁に更新されるテーブルから操作を実行します。
アイソレーションは に設定されていCOMMITTED READ
ます。select
このテーブルを dbaccess から手動で実行すると、削除が行われているときに同じエラーが発生します。