數據庫參數調優--自動更新統計信息

背景


我們都知道SQL SERVER 藉助統計信息來產生執行計劃,而過時的統計信息會導致SQL SERVER選擇錯誤的執行計劃,導致嚴重的性能問題。  在數據庫中選項可以自動的更新統計信息。如下圖:


默認他是開啓的,所以我們很少去關注他或者修改他.

異步更新和同步更新

其實除了同步更新統計信息外,還有一個異步更新統計信息的選項。他和同步更新統計信息有什麼關係呢?

同步更新

默認情況下,當自動更新統計信息設置爲True時,當數據的更改(插入,更新,刪除或合併)達到閾值時,估計的行數會過時,SQL Server查詢優化器將自動更新統計信息。 當統計數據陳舊時,執行計劃可能會變得不理想,這可能導致性能下降。這個項確保您的統計信息儘可能保持最新。 每次執行緩存的查詢計劃時,Optimizer將檢查數據更改並根據情況生成新的統計信息。 這個行爲正是我們想要的,但有需要注意的是,當統計信息過期時,查詢優化程序在編譯和執行查詢之前要等待更新的統計信息。知道這個更新動作完成纔會繼續執行查詢。 這會顯着地減慢執行過程。

異步更新

即使現有統計信息過期,查詢也會使用現有統計信息進行編譯; 如果查詢編譯時的統計信息已過期,則查詢優化器可以選擇次優查詢計劃。 在異步更新完成後,優化器使用更新的統計信息進行編譯

從上面的對比可以知道,在需要進行自動更新是,異步更新可以不用等待更新統計信息更新完成,再去編譯執行當前的查詢。

如何查看選項

SELECT name, is_auto_update_stats_on, is_auto_update_stats_async_on

FROM sys.databases


使用ssms 


如何修改

TSQL

ALTER DATABASE YourDatabaseName SET AUTO_UPDATE_STATISTICS ON
GO

ALTER DATABASE YourDatabaseName SET AUTO_UPDATE_STATISTICS_ASYNC ON
GO

注意:要開啓異步更新需要首先開啓自動更新統計信息選項。因爲異步更新統計信息依賴於自動更新。

SSMS

在上圖中的選項處直接修改就可以


適用場景


1.這個選項適用於OLTP的環境。因爲OLTP的數據變動比較頻繁,容易造成統計信息的更新。OLAP要慎重使用

2.應用程序經歷了一個或多個查詢等待更新的統計信息導致的客戶端請求超時。 在某些情況下,等待同步統計可能會導致應用程序出現大量超時,從而導致失敗

3. 應用程序經常執行相同的查詢,類似查詢或類似的緩存查詢計劃。 異步統計信息更新的查詢響應時間可能比使用同步統計信息更新更爲可預測,因爲查詢優化器可以執行傳入查詢,而無需等待最新的統計信息。 這避免了延遲一些查詢而不是其他查詢。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章