執行 sp_BlitzCache 代理作業以協助性能調整工作/基線查詢性能?
剛剛開始使用各種 Brent Ozar 工具(例如 sp_BlitzCache 和 sp_BlitzIndex)來辨識和糾正 SQL Server 性能問題。一直在嘗試將 sp_AskBrent(現為 BlitzFirst…)和 sp_WhoIsActive 作為代理作業執行,以作為基準查詢性能的一種方式。
你們中的任何人是否定期執行 sp_BlitzCache 作為代理作業來擷取歷史記錄/為 SQL Server 性能調整工作提供基線和/或證據?如果是這樣的話:
- 這對您的環境有多大幫助?
- 您認為哪個 sp_BlitzCache sort_order 對記錄最有幫助?我正在考慮按 cpu、讀取、持續時間和每分鐘執行次數來單獨輸出表。但想知道我是否應該對這些類型使用“avg X”。
- 我應該堅持預設的@top = 10 嗎?還是去20、30等?
這是我使用總讀取數和前 20 位的範例:
EXEC DbaTools.dbo.sp_BlitzCache @top=‘20’, @sort_order = ‘reads’, @output_database_name = ‘DbaTools’, @output_schema_name = ‘dbo’, @output_table_name = ‘BlitzCache_by_reads’
- 你會多久做一次這樣的工作?每週?由於計劃記憶體在主機/服務重新啟動之前不會被清除,因此需要明確的命令(dbcc freeproccache)或以其他一些可能出乎意料的方式(對某些人來說),例如更改 MAXDOP(我們的團隊了解到後者艱辛的道路)。
- 這更符合我剛剛發布的關於 sp_AskBrent 和 sp_WhoIsActive 的另一個 StackExchange 問題,但是定期執行這些 SP 的資源密集程度如何?
另一個 StackExchange 問題在這裡:
這對您的環境有多大幫助?
這些天我的筆記型電腦實例執行良好!
但說真的,如果您缺少監控工具,這是分析計劃記憶體中各種問題和調整機會的好方法。我們警告您許多僅查看執行計劃可能並不明顯的內容。
您認為哪個 sp_BlitzCache sort_order 對記錄最有幫助?我正在考慮按 cpu、讀取、持續時間和每分鐘執行次數來單獨輸出表。但想知道我是否應該對這些類型使用“avg X”。
您可能會在不同的排序順序中發現一些重疊。例如,CPU 和讀取通常有很多重疊。
至於平均與總數,這主要取決於計劃記憶體的穩定性。如果變化不大,平均值可能比總數更有趣。有時小的、不一定可調整的查詢會佔用大量的總 CPU 時間,因為它們執行相當頻繁,以及維護任務。這是你必須為每個環境弄清楚的事情。
我應該堅持預設的@top = 10 嗎?還是去20、30等?
這也是主觀的,但有點適合您的另一個問題。您選擇引入分析的計劃越多,資源密集度就越高。在 SQL Server 中分析 XML 是……具有挑戰性的。
預設值為 10 以保持較小的佔用空間,但也會給您一些有意義的結果。當然,如果您在前 10 名中沒有發現任何有趣的東西,請隨意嘗試不同的值,看看執行需要多長時間,即使它可以幫助您找到任何有趣的東西。
你會多久做一次這樣的工作?每週?由於計劃記憶體在主機/服務重新啟動之前不會被清除,因此需要明確的命令(dbcc freeproccache)或以其他一些可能出乎意料的方式(對某些人來說),例如更改 MAXDOP(我們的團隊了解到後者艱辛的道路)。
這在一定程度上取決於計劃記憶體的穩定性。如果相同的儲存過程一遍又一遍地執行,那麼每天或每週都可以。如果您的伺服器收到大量推送的臨時使用者查詢,您可能希望每小時執行一次,或者以您的伺服器可以處理的其他時間間隔執行。
您還可以使用該
@IgnoreQueryHashes
參數將一些噪音排除在外。這更符合我剛剛發布的關於 sp_AskBrent 和 sp_WhoIsActive 的另一個 StackExchange 問題,但是定期執行這些 SP 的資源密集程度如何?
我們的目標是盡可能不佔用資源,但是您選擇分析的計劃數量和計劃的規模可能會導致峰值。就像我說的,在 SQL Server 中分析 XML 並不有趣。它是單執行緒的,並且可以使用一點 CPU。
@DatabaseName
如果您只對一個數據庫在做什麼感興趣,則可以使用該參數,這有助於集中調整工作。謝謝!