1. 程式人生 > >數據庫參數調優--自動更新統計信息

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

-a 選擇 避免 header rfi sele -h size 數據

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

原文: https://blog.csdn.net/z10843087/article/details/78356975

背景

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

技術分享圖片

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

異步更新和同步更新

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

同步更新

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

異步更新

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

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

如何查看選項

  1. SELECT name, is_auto_update_stats_on, is_auto_update_stats_async_on
  2. 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. 應用程序經常執行相同的查詢,類似查詢或類似的緩存查詢計劃。 異步統計信息更新的查詢響應時間可能比使用同步統計信息更新更為可預測,因為查詢優化器可以執行傳入查詢,而無需等待最新的統計信息。 這避免了延遲一些查詢而不是其他查詢。

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