問題タブ [sql-execution-plan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
40653 参照

sql - SQL Server 2005/2008 でクエリ実行統計をクリアする方法

この投稿から取得したこの非常に便利な SQL を使用して、クエリ実行統計を取得することに基づいています最も実行されたストアド プロシージャ - スタック オーバーフロー:

これらの実行統計を完全に消去して、最初からやり直すにはどうすればよいですか?

これは、開発のバグやテストによって通常は多数のルーチンが呼び出され、実際の使用レベルが無効になるため、特に役立ちます。

0 投票する
1 に答える
139 参照

performance - SPパフォーマンスの欠如によるSQLストアドプロシージャの問題

主な問題は、私のspには、パフォーマンスの低下を引き起こす可能性のあるさまざまなオブジェクトとロジックがあることです。

SPに表示されるものと、SP1-Tempテーブルで使用されているテーブルを以下に示します。(2つの一時テーブル)

CREATE TABLE #TEMP_TABLE(AB INT NOT NULL、AC INT NOT NULL、AD INT NOT NULL、AF INT NULL、AG INT NULL、REFERENCE_NUMBER INT NULL)CREATE NONCLUSTERED INDEX IX_1 ON #TEMP_TABLE(AB、AC、AD)

2-SPのTEMP1として作成一時テーブルにプロセスを挿入します

3-SPの最後にあるDROPTABLE#TEMP_TABLE DROP TABLE#TEMP_TABLE2

4-結合に使用されるテーブルは2つありますが、JOIN演算子の「on」の場合に使用されるすべてのフィールドではありません。例えば; 最初のテーブルで宣言されたクラスター化インデックスフィールドと、最初のテーブルのクラスター化インデックスグループにない日付列があります。

略して; クラスター化インデックスと非クラスター化インデックスは重要ですが、どの順序で宣言する必要があります。どのインデックスタイプから必要なのか、JOINプロセスなどをさらに使用するためのインデックスの作成順序を教えてください。

5-一時テーブルの代わりにテーブル変数を使用する必要があります。わかりましたが、テーブル変数を使用できない疑問符がたくさんあります。

*テーブル変数へのINSERTは、並列処理を利用しません。 ref->

6-論理読み取りについて聞いた。私は本当にこれらの数字に注意を払う必要があります。サンプルデータの結果の詳細を以下に示します(*)

7-実行計画...

実行計画

*出力:

テーブル'CHANNEL'。スキャンカウント0、論理読み取り2、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。テーブル'XYZ_DATE'。スキャンカウント1、論理読み取り2、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。表'XYZ01'。スキャンカウント3171、論理読み取り13135、物理読み取り153、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。表'XYZ02'。スキャンカウント5、論理読み取り51256、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。表'#TEMP_TABLE_________________________________________________________________________________________________________000000000840'。スキャンカウント0、論理読み取り97、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。表'Worktable'。スキャンカウント0、論理読み取り0、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。

(影響を受ける32行)テーブル'#TEMP_TABLE2________________________________________________________________________________________________________000000000841'。スキャンカウント0、論理読み取り64、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。表''XYZ03'。スキャンカウント0、論理読み取り107、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。表''XYZ04''。スキャンカウント32、論理読み取り129、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。表'#TEMP_TABLE_________________________________________________________________________________________________________000000000840'。スキャンカウント1、論理読み取り1、

(影響を受ける21行)

(21行が影響を受けます)テーブル'XYZ05'。スキャンカウント0、論理読み取り87、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。表「XYZ01A」。スキャンカウント21、論理読み取り147、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。表「XYZ04」。スキャンカウント0、論理読み取り84、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。表'#TEMP_TABLE2________________________________________________________________________________________________________000000000841'。スキャンカウント1、論理読み取り1、物理読み取り0、先読み読み取り0、lob論理読み取り0、lob物理読み取り0、lob先読み読み取り0。

(*)

0 投票する
4 に答える
1054 参照

sql - クエリで結合を使用する順序は実行時間に影響しますか?

クエリで結合を使用する順序は実行時間に影響しますか?

0 投票する
2 に答える
6378 参照

postgresql - PostgreSQL のクエリ プランを読むとき、どうすれば「よく考える」ことができますか?

今日は、理解できないクエリ プランについて頭を悩ませるのに 1 時間以上費やしました。クエリは で、UPDATEまったく実行されませんでした。完全にデッドロック:pg_locks何も待っていないことを示しています。さて、私は自分自身が最高のクエリ プラン リーダーだとも最低のクエリ プラン リーダーだとも思っていませんが、これは非常に難しいと思います。私はこれらをどのように読むのだろうかと思っています。エラーを特定するために Pg エースが従う方法論はありますか?

この問題を回避する方法については別の質問をする予定ですが、今はこれらのタイプの計画の読み方について具体的に話しています。

このクエリプランの問題-私は理解していると思います-おそらく次のことを最もよく言いますRhodiumToad(彼は間違いなくこれに優れているので、彼の説明が優れていることに賭けます)irc://irc.freenode.net/#postgresql

ああ、その計画は悲惨な可能性があります。その計画の問題は、各行に対して非常に高価なハッシュジョインを実行していることです 。問題は、他の結合からのrows = 1の推定であり、プランナーは、内部外側のパスが 1 つの行のみを返すと推定されるネストループのパス。明らかに、プランナーの見積もりでは、高価な部分は一度だけ実行されますが、これは実際には本当に台無しになる明らかな傾向があるため、問題は、プランナーが自分の見積もりを理想的に信じていることです。 1行を返す」および「1行以上を返すことはできません」が、それを既存のコードに組み込む方法がまったく明確ではありません

彼は続けてこう言います:

どの結合にも影響する可能性がありますが、通常はサブクエリに対する結合が最も可能性が高いです

この計画を読んだとき、最初に気づいたのは でNested Loop Anti Join、これには のコストがかかりました169,413(上限に固執します)。Nested Loopこの Anti-Join は、 at cost of31,738の結果とHash Joinat a cost ofの結果に分解され137,424ます。現在、137,424はよりもはるかに大きい31,738ので、問題はハッシュ結合であることがわかりました。

EXPLAIN ANALYZE次に、クエリの外にある Hash Join セグメントに進みます。7秒で実行されました。(lot_id、vin)、および (co.code、および v.code) にインデックスがあることを確認しました -- ありました。個別に無効seq_scanhashjoinすると、2 秒未満の速度の増加に気付きました。1 時間後に進行しなかった理由を説明するのに十分ではありません。

しかし、結局、私は完全に間違っています!はい、それはクエリの遅い部分でしたが、rows="1"ビットのためです(私はそれがにあったと思いますNested Loop Anti Join)。これは、行の量を誤って見積もるプランナーのバグ (能力の欠如) ですか? 同じ結論に達するために、これをどのように読むべきRhodiumToadですか?

それは単にrows="1"私がこれを理解するきっかけになるはずですか?

関連するすべてのテーブルで実行VACUUM FULL ANALYZEしましたが、これは Postgresql 8.4 です。

0 投票する
4 に答える
592 参照

sql - SQL実行プランのキャッシュ

SQL Server 2005がある程度の実行プランのキャッシュを実行することは知っていますが、同じクエリを2回実行する間に時間差を生じさせるにはそれで十分でしょうか?初回は3時間かかり、次回は1分かかりますか?それも可能ですか?

0 投票する
1 に答える
12056 参照

sql - クエリ実行プラン: インデックスがありません

代替テキスト http://img502.imageshack.us/img502/7245/75088152.jpg

それらを結合する2つのテーブルがあり、そのうちの1つは一時テーブルで、テーブルの作成後にインデックスを作成します。しかし、それは上記のクエリ実行計画で述べられています。

すべてのスキャン操作をシーク操作に変換するには、何を考慮する必要がありますか? 接合部や条件が整っている箇所があります...

よろしくbk

0 投票する
3 に答える
458 参照

sql-server-2005 - SQLServer2005実行プラン

SQL Server 2005で実行速度の遅いストアドプロシージャのトラブルシューティングを試みています。実行プランを分析し、45%のSORTを確認していますが、ORDER句を使用していません。これを引き起こしているのは何ですか。

代替テキスト

UPDATE SP(クリーンアップされ、ORに変更が加えられました)

vwStuRaceRptngビュー

OLD SP

助けてくれてありがとう。参考までに、tfnParseStringIntoTable関数は、コンマで区切られた値のリストに基づいてテーブルを返します。

0 投票する
2 に答える
2091 参照

sql - SQL Server 2005 のプロシージャのクエリ プランがない

150 ~ 200 のストアド プロシージャを含む SQL Server DB があり、1 つを除いてすべてが sys.dm_exec_query_plan で表示可能なクエリ プランを生成します。http://msdn.microsoft.com/en-us/library/ms189747.aspxによると:

次の条件では、sys.dm_exec_query_plan に対して返されるテーブルの query_plan 列に Showplan 出力が返されません。

  • plan_handle を使用して指定されたクエリ プランがプラン キャッシュから削除された場合、返されるテーブルの query_plan 列は null になります。たとえば、プラン ハンドルがキャプチャされてから sys.dm_exec_query_plan で使用されるまでに時間の遅延がある場合、この状態が発生する可能性があります。
  • 一括操作ステートメントやサイズが 8 KB を超える文字列リテラルを含むステートメントなど、一部の Transact-SQL ステートメントはキャッシュされません。このようなステートメントの XML プラン表示は、キャッシュに存在しないため、バッチが現在実行されていない限り、sys.dm_exec_query_plan を使用して取得できません。
  • Transact-SQL バッチまたはストアド プロシージャに、EXEC (文字列) などを使用したユーザー定義関数の呼び出しまたは動的 SQL の呼び出しが含まれている場合、ユーザー定義関数のコンパイル済み XML プラン表示は、返されるテーブルに含まれません。バッチまたはストアド プロシージャの sys.dm_exec_query_plan によって。代わりに、ユーザー定義関数に対応するプラン ハンドルの sys.dm_exec_query_plan を個別に呼び出す必要があります。

以降..

xml データ型で許可されるネストされたレベルの数の制限により、sys.dm_exec_query_plan は、ネストされた要素の 128 レベル以上のクエリ プランを返すことができません。

これらのどれもこの手順には当てはまらないと確信しています。どのようなタイミングであっても、結果にはクエリ プランがないため、1 は適用されません。長い文字列リテラルや一括操作がないため、2 は適用されません。ユーザー定義関数や動的 SQL がないため、3 は適用されません。そして入れ子はほとんどないので、最後のものは当てはまりません。実際、これは非常に単純な proc であり、完全に含まれています (問題のない人を保護するためにいくつかのテーブル名が変更されています)。パラメータ スニッフィングの悪ふざけは、問題の日付よりも古いことに注意してください。クエリでパラメーターを直接使用しても、引き続き発生します。この proc の表示可能なクエリ プランがない理由について何か考えはありますか?

0 投票する
4 に答える
355 参照

sql-server - SQL Server での実行計画の使用法は何ですか?

SQL Server での実行計画の使用法は何ですか? これらの計画はいつ役に立ちますか?

0 投票する
1 に答える
976 参照

oracle - Max()がExplainプランで注文を作成するのはなぜですか?

私が何かをしようとすると

Explain-planで、これはソートを実行することによって実行されることがわかります。さて、ソート(の複雑さで何かが必要になると思いますO(nlogn))は、各行をスキャンして最大値を記憶する(で実行できるO(n))よりもはるかにコストがかかる必要があります。

ここで何かが足りませんか?オラクルは実際にソートを実行していますか、それともexplain-planはObjectId列のすべての値の単純なスキャンを記述するために「sort」という記述を使用していますか?オラクルが実際に「実際のソート」を実行する場合、これを実行する正当な理由がありますか?

前もって感謝します!