以下で私が言うことは、使用中のOracleの観察と推論に基づいており、Oracleの内部の深い理解に基づいていないことに注意してください。いずれも権威あると見なされるべきではありません。
ナインサイドが最初の段落で言ったことは正しい。ただし、提案されたテストに注意してください。実行時間の長いOracleクエリがすべて同じというわけではありません。クエリは2つのフェーズで評価されるようです。最初のフェーズでは、行を正しい順序で返す方法を知るのに十分なデータを組み合わせ、2番目のフェーズでは、計算されなかったギャップを埋める行を返します。第1段階。 2つのフェーズ間の作業の分割は、コストベースのオプティマイザの設定によっても影響を受けます。例えば最初の行とすべての行。
これで、クエリがフェーズ1にある場合、キャンセルリクエストは、せいぜいフェーズ1の終わりに適用されるようにキューに入れられているように見えます。つまり、クエリは引き続き動作します。
フェーズ2では、行がバンチで返され、各バンチの後にキャンセルコマンドが有効になるため、ドライバーがコマンドをサポートしていると仮定すると、キャンセルリクエストによってクエリが強制終了されます。
JDBCのcancelコマンドの仕様には、クエリの実行が停止しない場合にどうなるかが記載されていないようです。そのため、コマンドは強制終了の確認を待つか、タイムアウトしてクエリの実行中に戻る可能性があります。