Sql-Server

sp_blitzCache 針對一個儲存過程

  • March 21, 2019

最近我們開始使用 sp_BlitzCache 來幫助我們調整查詢。我們發現一個 SP 存在一些問題,並且我們能夠成功地對其進行重構。

我有一份 sp_BlitzCache 輸出的副本,在我們調整查詢之前的一周內獲取,可在此處獲得

https://drive.google.com/open?id=1oiAEl62ZT51qcCEhVzkg8oDA3HB-NCsv

執行生成此輸出的命令是

exec sp_BlitzCache @StoredProcName = 'hs_UpdateShipmentPackagesAndWeightSp'

幾個問題

1)我注意到同一個計劃句柄有多行,這是為什麼呢?

  1. 你會注意到成本最高的查詢 (1451) 有整個 create procedure 語句的查詢文本,這是什麼意思?此行的指標是否僅用於創建儲存過程?

  2. 對於上面提到的最高成本行,它的最小/最大授權幾乎是 2GB。這是否意味著當我們執行 create procedure 語句時它要求 2gb 的記憶體?還是在呼叫 proc 時使用此計劃?我想這與問題2的答案有關

  3. 為什麼在某些情況下我們有 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 的內容。

問:為什麼授予的記憶體與使用的記憶體不同?

因為授權是在查詢開始使用記憶體之前計算的。這有點像你要錢去商店——如果他們在商店裡沒有你想要的所有東西,你可能不會使用所有的記憶體。您最終可能只使用了部分資金。

引用自:https://dba.stackexchange.com/questions/232744