Sql-Server

啟用自動統計後的性能指標

  • August 29, 2019

簡潔版本

在數據庫上啟用AUTO_CREATE_STATISTICS&後AUTO_UPDATE_STATISTICS_ASYNC,什麼性能指標最能顯示更改?

長版

我們剛剛意識到遺留系統的數據庫從未打開AUTO_CREATE_STATISTICS& AUTO_UPDATE_STATISTICS_ASYNCAUTO_UPDATE_STATISTICS已打開)。

如您所料,打開這些後,我們的應用程序的性能要好得多。響應時間明顯更好,使用者無需等待螢幕刷新或頁面載入。

數據庫索引良好,我們已經在我們認為需要的地方手動創建了統計資訊。啟用後我立即檢查sys.stats(加入sys.stats_columns& sys.objects),它只需要在三個對像上創建統計資訊。(我已經記錄了這些,以防量化這些變化取決於他們。)

我在這台伺服器上擷取了很多性能數據,並查看了更改前後的數據,但我還沒有確定實際收益在哪裡。

我還有其他類似的系統,其中該數據庫的自動統計仍然關閉。這些系統也將從啟用它們中受益,但我正在等待以防有一些我還沒有的指標,我可以在進行更改之前添加它。

我真正的問題

除了使用者體驗之外,我如何量化通過更改系統上的 Auto-Stats 設置所帶來的增長?

Windows Server 2008 上的 SQL Server 2008R2。

如果SET AUTO_CREATE_STATISTICS ON為您的最終使用者提高了性能(傳聞),這可能意味著在沒有統計資訊的列上使用謂詞的查詢獲得了更好的執行計劃,從而縮短了執行時間。“更好”的執行計劃可能會帶來以下一項或多項改進:

  • 更少的邏輯/物理讀取
  • 降低 CPU 使用率
  • 更短的查詢執行時間/持續時間

我不確定您要擷取哪些指標。如果您能夠達到單個查詢執行時間的水平,您可以在更改前後找到相同查詢的範例,並確認它們減少了執行時間(或更少的 CPU 和讀取等)。

例如,如果您將內容記錄sys.dm_exec_query_stats到表中,您可以在更改設置後找到具有相同sql_handle但較低 CPU、讀取等的查詢。


如果您正在記錄執行計劃 XML,您可能能夠查找是否存在這樣的警告:

沒有統計資訊警告的螢幕截圖

它在 XML 中顯示如下:

 <Warnings>
   <ColumnsWithNoStatistics>
     <ColumnReference Database="[TestDB]" Schema="[dbo]" Table="[Hist]" Column="Num" />
   </ColumnsWithNoStatistics>
 </Warnings>

如果您只需要查看伺服器級別的聚合指標,您可能仍然會看到整體讀取或 CPU 已下降,但如果它被其他工作負載和維護活動沖淡,可能更難確定它。

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