何年も使用されているクエリがありますが、今日、クエリが際限なくハングし始めました。クエリを分解したところ、ハングする原因となった部分は、主キーの単純な結合であり、稲妻のように実行されるはずです。問題のあるテーブルを削除すると、クエリは1秒未満で実行されます。
総合的には次のようになります:(問題のテーブルはremote2です)
SELECT fields
FROM local_table1, local_table2, ... (more tables)
remote_table1@dblink remote1, remote_table2@dblink remote2
WHERE
...clauses to tie the local tables together with each other and remote_table1...
remote2.primary_key = remote1.primary_key_of_remote2
AND remote2.afield <> 'avoid this value'
それはある種のDBロックに引っかかっているように動作していますが、私自身もDBAもそれを見つけることができません。これをロックしているリモートデータベースリンクによって使用されるある種の特別なキューイングメカニズムはありますか?
まれに、分散トランザクションが失敗し、分散トランザクションの一方の側に何らかの「ハーフロック」が残ることがわかりました。反対側がいなくなったので、それは解決されませんでした。ロックを検索する一般的なツールの少なくとも1つは、これらのロックを認識しませんでした。しかし、それらを見つけることはできました(v $ lockを照会したと思います。覚えていません。最後に発生してから1年以上経過しています)。これを修正するために、そのセッションを実行しているプロセスを特定し、DBAがkill -9でOSプロセスを強制終了しました。これはまれな問題であり、約18か月間私はそれを見ていません。そのため、それはOracleの以前のバージョンでのみ発生する問題である可能性があります。 (ただし、通常は1年に1〜2回しか発生しないため、運が良かっただけかもしれません。)