執行查詢但不向客戶端返回結果
我正在測試查詢的性能並嘗試修復參數嗅探問題。根據參數,有時它返回 3 行,有時它返回超過 5K 行。我想測試我提出的更改對執行時間的影響。但是由於返回的行數如此之多,因此執行時間會出現偏差,因為它考慮了客戶端消耗行所花費的時間。我想刪除返回行所花費的時間並測量伺服器上的實際執行時間。
我看過,
SET FMTONLY ON
但看起來它沒有執行查詢。我還嘗試將行轉儲到表/臨時表中,但這會增加估算成本,並導致計劃朝著我不想要的方向改變。我們還有其他方法可以實現這一目標嗎?
乾杯
您可以使用SET STATISTICS TIME ON來獲取伺服器執行查詢所花費的確切時間。
客戶統計數據可以幫助確定客戶花費的時間。
可以在此處找到一些非常有價值的資訊,例如 INSERT、DELETE、UPDATE 和 SELECT 語句的數量——想想在調整復雜的儲存過程時它們有多麼有用。您可以查看受影響或返回的行數,以及執行的事務數。
網路統計數據可讓您查看有多少流量從您的客戶端移動到伺服器並返回。
時間統計資訊告訴您在客戶端上花費了多少時間與在等待伺服器上花費了多少時間。這些數字以毫秒為單位。
我經常使用它來比較使用不同參數執行的儲存過程性能,這在更改這些參數會影響處理和返回的數據量時特別有用。
從 SQL Server 管理工作室
選擇後,使用同一會話的每次執行都將添加一個新列,其中包含該執行的性能結果。
使用 sysjobhistory 進行測試
use msdb go set statistics time on select * from dbo.sysjobhistory go
從消息選項卡:
(受影響的 18 行)
SQL Server 執行時間:CPU 時間 = 0 毫秒,經過時間 = 3 毫秒。
從客戶統計選項卡
從 SET STATISTICS TIME ON 開始執行 3 毫秒,從“客戶端統計資訊”選項卡執行 5 毫秒客戶端處理時間。
Dan Guzman:我認為您需要在伺服器端的 SQLCLR proc 中使用結果。雖然會有一些成本,但如果沒有網路 IO 會更少。
就個人而言,我會將消耗結果所需的時間包括為經過的時間,並使用邏輯讀取和 CPU 等其他指標來衡量資源使用情況。