2017-05-09 34 views
0

我們有一個大小爲1257GB的數據庫,其中包含100個以上按小時事務處理的對象(插入和更新)。我們有Auto Update statistics:TrueAuto Update statistics asynchronously : False爲什麼自動更新統計信息無法有效提高性能

當我們觸發查詢來獲取數據需要很長時間。但是當我們手動執行SP_UpdateStats時,相同的查詢花費的時間非常少,以獲取相同數量的數據。

請讓我知道我們是否需要定期更新統計信息?使用EXEC SP_UpdateStats有什麼優缺點?

Windows服務器2012R2和SSMS2014。

回答

2

但是,當我們手動exec的SP_UpdateStats,同樣的查詢花費非常少的時間來獲取數據

即使您已設置爲true,自動更新統計信息的一樣多,你的統計數據不會經常更新

SQLServer triggers automatic statistics update,based on certain thresholds和低於閾值,擁有良好的所有版本低於SQLServer的2016

  • 表格大小已經從0到> 0行(測試1)。

  • 收集統計信息時,表中的行數爲500或更少,自此(統計信息對象)的統計信息對象的前導列的colmodctr自此以後發生了更改(測試2)。

  • 收集統計信息時,該表有超過500行,並且當統計信息是統計信息時,統計信息對象的前導列的colmodctr已更改超過表的行數的500 + 20%聚集(測試3)。

所以根據你的表有多大,你可以決定使用上述公式

與SQLServer的2016開始的門檻,這個門檻已經改變,統計數據將被更頻繁地觸發。

The same behaviour can be obtained in older versions with the help of traceflag 371

例如,如果跟蹤標誌被激活(在默認情況下的SQLServer 2016激活),更新的統計將在一個表時發生百萬變化觸發1個十億行。

如果跟蹤標誌未激活,那麼在觸發更新統計信息之前,具有10億條記錄的同一個表需要2億次更改。

請問我們是否需要定期更新統計數據?使用EXEC SP_UpdateStats有哪些優缺點?

如果你看到由於不準確的統計數據不理想的計劃,繼續安排這個新的標誌

談到缺點,如果你經常更新的統計數據,你會看到查詢計劃得到重新編譯,這將反過來原因再次編譯計劃時的CPU壓力

2

Sp_UpdateStats將更新所有表的統計信息。布倫特奧扎爾認爲,這應該做得更有規律,然後做索引重組或重建。通過更新您的統計信息,SQL Server更有可能創建一個「更好」的查詢計劃。其缺點是所有表格的統計數據(無論他們是否需要)都將被更新,並且可能需要大量資源才能完成。當機器沒有被大量使用時,許多DBA每晚或每週運行sp_updatestats。有些腳本會檢查要更新的表,並且只更新哪些表。

看到不同的方法來更新統計這是一個良好的開端: https://www.brentozar.com/archive/2014/01/update-statistics-the-secret-io-explosion/

如果查詢運行速度慢但更可能有與查詢等問題。您應該發佈查詢和查詢計劃,並且社區可能會提供有用的提示來改進查詢或向基礎表添加索引。

+0

Joshi,請不要在將來編輯我的意見。有更好的方法來獲得積分,然後將sp_Updatestats設置爲反色。 –

相關問題