sp_blitzCache 針對一個儲存過程
最近我們開始使用 sp_BlitzCache 來幫助我們調整查詢。我們發現一個 SP 存在一些問題,並且我們能夠成功地對其進行重構。
我有一份 sp_BlitzCache 輸出的副本,在我們調整查詢之前的一周內獲取,可在此處獲得
https://drive.google.com/open?id=1oiAEl62ZT51qcCEhVzkg8oDA3HB-NCsv
執行生成此輸出的命令是
exec sp_BlitzCache @StoredProcName = 'hs_UpdateShipmentPackagesAndWeightSp'
幾個問題
1)我注意到同一個計劃句柄有多行,這是為什麼呢?
你會注意到成本最高的查詢 (1451) 有整個 create procedure 語句的查詢文本,這是什麼意思?此行的指標是否僅用於創建儲存過程?
對於上面提到的最高成本行,它的最小/最大授權幾乎是 2GB。這是否意味著當我們執行 create procedure 語句時它要求 2gb 的記憶體?還是在呼叫 proc 時使用此計劃?我想這與問題2的答案有關
為什麼在某些情況下我們有 Min/Max grant KB > 0 和 Min/Max used grant kb > 0,但使用的記憶體授權百分比為 null ?
我們正在執行 SQL Server 2012。
謝謝,凱文
稍微改寫你的問題:
問:為什麼同一個計劃句柄有多個行?
A:因為一個計劃可以包含多個語句。
問:為什麼一個過程在 sp_BlitzCache 中有多行?
與上麵類似:因為儲存過程中可以有多個語句。您將看到整個 proc 指標的一行,其中每個語句的一行。
問:當我看到“CREATE PROC”時,這是否意味著 proc 已創建?
不,這就是 SQL Server 在儲存過程中儲存查詢的方式。它向您顯示 proc 的內容。
問:為什麼授予的記憶體與使用的記憶體不同?
因為授權是在查詢開始使用記憶體之前計算的。這有點像你要錢去商店——如果他們在商店裡沒有你想要的所有東西,你可能不會使用所有的記憶體。您最終可能只使用了部分資金。