web-dev-qa-db-ja.com

SQL Serverは、合計6,000%になるクエリ実行プランをどのように生成しますか?

weird execution plan

今日私はThe Heapにいて、改善できると思ったもののクエリプランを見ていました。ただし、SQL Serverクエリオプティマイザーに対する私の信念を揺るがす何かを作成しました。 100%に数えることさえできない場合でも sql-server を信頼できますか?

テーブルの特徴:

  • 非ID列でクラスター化
  • 12個のインデックス、そのうちの1つはdate_entered問題の列
  • 60,000レコード
  • さまざまなタイプと長さの26列
  • PAGE圧縮テーブル

誰かがこれを以前に見たことがありますか、そして計画がそれほど歪んでいるように見える原因は何ですか?


SQL Sentry Plan Explorer - imageTop Operations

11
孔夫子

このバグは何年も前から知られており、修正されることはありません。最初に報告したのは6年前ですが、それよりずっと長く存在しています。これらは推定コストであり、オプティマイザ自体にはまったく影響せず、信頼できるかどうかも関係ありません。疑わしい計算が含まれているのは、単にshowplanの出力です。

http://connect.Microsoft.com/SQLServer/feedback/details/267530/ssms-execution-plan-sometimes-exceeds-1

http://connect.Microsoft.com/SQLServer/feedback/details/621330/sum-of-operator-costs-is-more-than-100-in-the-execution-plans

http://connect.Microsoft.com/SQLServer/feedback/details/436184/huge-operator-cost-in-estimated-execution-plan

http://connect.Microsoft.com/SQLServer/feedback/details/370798/query-plan-iterator-cost-percentage-way-off

解決策: SQL Sentry Plan Explorer *を使用します。ここでは、適切な計算が行われる傾向があります(または単に推定コストを見ることをやめ、より意味のあるメトリックを見ること)。このプランをプランエクスプローラーで開くと、パーセンテージが正しく加算されることを保証します。

免責事項:私はSQL Sentryで働いています。

13
Aaron Bertrand