在性能調優:理解Set Statistics IO輸出我們討論了Set Statistics IO,還有如何幫助我們進行性能調優。這篇文章會討論下Set Statistics Time,它會告訴我們執行一個查詢需要的時間。
我們用一個例子來開始。
1 USE AdventureWorks2008r2 2 GO 3 DBCC dropcleanbuffers 4 DBCC freePRoccache 5 6 GO 7 SET STATISTICS TIME ON 8 GO 9 SELECT * 10 FROM Sales.SalesOrderHeader SOH INNER JOIN Sales.SalesOrderDetail SOD ON11 SOH.SalesOrderID=SOD.SalesOrderID 12 WHERE ProductID BETWEEN 700 13 AND 80014 GO15 SELECT * 16 FROM Sales.SalesOrderHeader SOH INNER JOIN Sales.SalesOrderDetail SOD ON17 SOH.SalesOrderID=SOD.SalesOrderID 18 WHERE ProductID BETWEEN 700 19 AND 800
在例子里有2個SELECT語句。第1個在清空緩存后執行。我們來看看輸出。
SQL Server 分析和編譯時間:當我們提交了一個查詢給SQL Server去執行時,它需要為任何語法錯誤進行分析并編譯,然后優化器生成最優計劃去執行。SQL Server分析和編譯時間指的是完成進行這些預執行步驟所花的時間。我們來看第2個執行的輸出,在SQL Server分析和編譯時間環節,CPU時間是0毫秒,占用時間是21毫秒。這表示SQL Server沒有花任何時間在分析和編譯上,因為執行計劃已經在緩存里。CPU時間值的花在CPU上的時間,占用時間指的是完成分析和編譯所占用的總時間。CPU時間和占用時間兩者之間的區別可能是在CPU周期隊列里的等待,或者在等待IO操作完成。這些時間在性能調優里并不重要,因為每次執行都會不一樣。如果你在這個環節看到的時間基本是一致的,很可能你在使用重編譯選項運行存儲過程。
SQL Server 執行時間:這個指的是SQL Server完成執行編譯好計劃的時間。CPU時間指的是花在CPU上的實際時間,占用時間指的是包括信號等待時間(signal wait time)在內的完成執行的總時間,等待時間是完成IO操作和輸出結果傳送給客戶端的時間。CPU時間可以作為性能調優的基線。這個值多次執行后不會有太大改變,除非你修改查詢或數據有變動。在服務器上的負載不會影響這個值。請注意這里顯示的時間單位都是毫秒。對于同個數據的同個查詢CPU時間值在反復執行后可能會不同,但也是1/100秒內。占用時間就取決于很多因素了,例如服務器工作量,IO加載,服務器與客戶端之間的網絡帶寬。因此在性能調優時,我們可以把CPU時間作為基線。
新聞熱點
疑難解答