更新統計數據實際上會降低效能嗎?

更新統計數據實際上會降低效能嗎?

我在生產資料庫上有一個夜間 sp_updatestats,它似乎工作正常,除了一個特定的預存程序在更新後遇到效能問題。

開發團隊目前正在修復該過程(一些新索引和我建議的查詢的一些重組),但目前唯一的解決方法是執行

UPDATE STATISTICS [SuperGiantTable]
WITH FULLSCAN

所以,問題是,我可以強制 sp_ updatestats 執行“with fullscan”選項嗎?我是嗎到?如果沒有,那麼我可能會添加上面的 UPDATE STATISTICS 命令以在 sp_updatestats 之後立即運行。

SQL 2000,順便一提。

答案1

正如 KPWINC 所說,「這確實取決於情況」。

還有其他幾個因素會影響您的問題的答案,因此一般答案可能不合適。

Microsoft MSDN 有 sp_updatestats 的條目(http://msdn.microsoft.com/en-us/library/aa260337(SQL.80).aspx)和「更新統計數據」(http://msdn.microsoft.com/en-us/library/aa260645(SQL.80).aspx

先回答你最後一個問題:

您需要重新閱讀 SQLServerPedia 條目。具體來說:

您的索引重建將自動更新索引的統計資料(樣本大小為 100%,通常比使用 sp_updatestats 時得到的結果更好)。索引重建完成後可以使用sp_updatestats更新其他需要注意的統計信息 (2005+)。

檢視 UPDATE STATISTICS (2000) 文檔,採樣如下:

注意 預設行為是對目標表或索引視圖執行範例掃描。SQL Server 會自動計算所需的樣本大小

Kimberly Tripp 整理了一些關於統計、索引和資料庫維護計劃的部落格文章(http://www.sqlskills.com/BLOGS/KIMBERLY/category/Statistics.aspx)。雖然這些資訊可能會也可能不會被您直接使用,但每個部落格條目的指導應該是可以的,並且引用的網站可能會有所幫助。

答案2

這真的取決於...

有多少個資料庫?

資料庫有多大?

活動量是多少?

sp_updatestats(預設)使用預設採樣率更新統計資訊。您可以嘗試使用重新取樣選項,但這僅在自上次更新統計資料後未發生自動更新時才有效(自動更新也使用預設取樣率)。

當您重建索引時,統計資料會透過完整掃描進行更新,大多數人在索引重建後會看到良好的效能。

只有在極少數情況下人們才會關閉自動統計功能。我建議將其保留為開啟狀態。

有一個以適當的時間間隔運行的作業(這取決於每個表的資料修改模式),並使用完整掃描或其他高採樣率進行手動統計更新。

一般來說我會如下進行:

如果它是一個大資料庫-每小時備份一次交易日誌。

-- 每日差異備份。 -- 每日碎片整理。 -- 每日更新統計資料。

-- 每週重新索引一次。 -- 每週一次完整備份。

很大程度取決於資料庫和事務。

答案3

還要記住的一件事是,自動計算的取樣率可能會導致產生的直方圖和密度向量無法正確考慮預存程序恰好針對的任何資料傾斜。

您知道採樣統計資訊更新和全掃描統計資料更新後預存程序之間的查詢計劃有何區別嗎?

另一件事 - 小心重建索引的維護計劃,然後更新那些作為重建的副作用而更新的相同統計數據 - 你最終可能會得到更差如果您只保留重建更新統計信息,那麼統計信息就會消失。

謝謝

相關內容