SQL のコンテキストでは、ランナウェイ クエリとはどういう意味ですか?
時間がかかりすぎると暴走するクエリを意味しますか? それとも、トリガーによる副作用がある場合を意味しますか?
SQL のコンテキストでは、ランナウェイ クエリとはどういう意味ですか?
時間がかかりすぎると暴走するクエリを意味しますか? それとも、トリガーによる副作用がある場合を意味しますか?
ランナウェイ クエリとは、オプティマイザによって見積もられた実行時間よりも実行時間が長いクエリです。ランナウェイ クエリは、実行中にすべてのプロセッサ サイクルまたはその他のリソースを使い果たす可能性があります。
これは、実行を開始して戻ってこないクエリです (「never」の値の場合)。
通常、クエリが想定されているインデックスを使用していないか、不適切な結合方法または不適切な結合順序を使用しているか、一連の文字列変換/比較を行っていることを意味します。
実行に数週間または数年かかる SQL クエリを作成することもできます。
ランナウェイ クエリにはいくつかの特徴があります。
いずれの場合も、他のユーザーが有用な作業を行うのを妨げる傾向があります。
通常、ランナウェイ クエリは、完了までに長い時間がかかるクエリや、大量のシステム リソース (CPU、メモリなど) を消費するクエリです。
一般的な理由は次のとおりです。
「ランナウェイ」クエリが戻ってくる可能性もありますが、価値のあるものにするのに時間がかかりすぎたり、システム リソースが多すぎたりするだけです。
それはあなたが実行し、二度と戻らないものを意味すると私は信じています. たとえば、決して結果が返ってこない (またはそうするのに非常に長い時間がかかる) select ステートメントを実行するとします。
クエリが必要以上の行を過剰に結合する場合。
ウィキペディアから: この言語では、デカルト結合 (考えられるすべての組み合わせを結合する) が簡単になりすぎます。その結果、WHERE 句の入力が間違っていると、結果セットが「暴走」します。デカルト結合は実際にはめったに使用されないため、明示的な CARTESIAN キーワードを必要とすることが保証される場合があります。SQL 1992 では CROSS JOIN キーワードが導入され、デカルト結合が意図されていることをユーザーが明確にできるようになりましたが、述語のない省略形の "comma-join" は引き続き許容される構文です。
不適切に作成されたトリガーが関係している場合、ランナウェイ クエリが発生する可能性があることに言及してください。トリガーは、複数レコードの挿入/更新またはデルタを処理できる必要があり、一部の人々は、セットベースの言語を使用するのではなく、カーソルを使用してこれを行うことが知られています. これにより、多数のレコードを更新するクエリが暴走する可能性があります。最近、このようなトリガーの 1 つを置き換えることで、更新される大規模なレコード セットのクエリ時間を 40 分から 40 秒に短縮することができました。
その他の原因には、偶発的なクロス結合 (distinct で修正)、検索不能な where 句、サブクエリの使用または定義済み関数の使用、不適切なインデックス付け、更新されていない統計、カーソルの使用、結合または場所での不十分な定義が含まれます。そしてどんどん。