Sql-Server

SQL Server 探查器中 CPU 時間和讀取的差異

  • February 19, 2018

我的生產數據庫伺服器(即 SQL Server 2016)性能下降,我使用分析器保存了長時間執行的查詢,如下圖所示:

CPU 時間 = 65141,讀取次數 = 36474959,持續時間 = 114546

我已經保存了跟踪文件並稍後打開,所以我不確定持續時間是毫秒還是微秒。

在此處輸入圖像描述

但是,現在當我在工作時間之外在 prod 上執行相同的查詢時,查詢執行速度很快,並且“設置統計資訊 IO”顯示只有很少的數據頁被讀取,我的假設是 CPU 時間和查詢的讀取應該是恆定的儘管持續時間長,查詢的執行時間,有什麼想法嗎?我是否應該根據數字認為此查詢效率低下?

  • @DanGuzman 正確地向您指出了Sommarskog 的優秀文章,您應該閱讀該文章。

    • 然後,如果以下簡單步驟不起作用,請嘗試查看計劃記憶體並查看其中的內容。或者使用查詢儲存(因為您使用的是 SQL 2016)來查看有多少不同的執行計劃。
  • 您正在將 SET STATISTICS(任何東西)與 Profiler 進行比較。不要那樣做。它不起作用。Profiler 和擴展事件擷取相對準確的數字。SET STATISTICS (anything) 沒有 - 作為一個例子,它沒有擷取函式成本!

  • 您正在嘗試匹配在不同時間完成的計劃,可能使用不同的統計數據。不要那麼做。

  • 繼續更新可疑查詢中涉及的所有表的統計資訊,最好使用 FULLSCAN,在“自己執行”測試之前查看是否會改變行為。

  • 查看查詢本身。

    • 是否涉及參數嗅探?
    • 一旦合理格式化,是否有數千行長的行,有幾十個連接,通常是同一個表?如果是這樣,請不要讓 Entity Framework 嘗試自行創建複雜的 SQL 語句。它做得很糟糕。

引用自:https://dba.stackexchange.com/questions/198223