如下語句能夠進行SQL 語句執行時間分析,兩個Go之間就是SQL查詢語句sql
運行一次後就能夠在查詢結果的信息標籤下看到統計信息數據庫
SQL Server 的查詢過程爲根據SQL表中的統計信息分析執行計劃,而後纔是編譯,最後執行。緩存
其中一共用到了三條Statistics相關語句服務器
1、statistics time選項工具
用於顯示分析、編譯和執行各語句所需的毫秒數。性能
一、CPU時間和佔用時間:spa
(1)CPU時間是指該句CPU佔用的時間,即語句佔用了多少CPU資源。在多個CPU的系統中,這個CPU時間是全部CPU上時間的總和。與profiler工具和服務器跟蹤選項所提供的CPU值一致.net
(2)佔用時間是指該語句總共用的時間,包括可能存在的I/O等待時間等。這個與Profiler中的Duration值一致blog
一般數據須要從磁盤中讀取,還可能遇到I/O阻塞,所以大部分狀況下看到的是佔用時間大於CPU時間,這個很容易理解,但有時候CPU時間是可能大於佔用時間的,這是因爲該句使用了多個CPU,可是等待時間又很短ip
那麼個SQL語句的CPU時間就是分析編譯裏的CPU時間加上執行時間裏的CPU時間之和,整個語句的執行時間就是全部佔用時間之和。一般編譯主要就是CPU的運算,那麼CPU時間和佔用時間應該是比較接近的。若是在執行過程,就可能須要將數據從磁盤讀入內存,那麼I/O等待時間的消耗就可能形成佔用時間很長。
二、在存在緩存的狀況下,執行計劃能夠重用,所以分析編譯時間可能都爲零;執行過程當中的數據也不須要從磁盤上讀取,因此執行時間中的中佔用時間很短,緩存使得性能大提升。
2、Statistics IO選項
用於SQL Server 顯示有關由 Transact-SQL 語句生成的磁盤活動量的信息。
一、「表 'ProductLite'。掃描計數 1,邏輯讀取 3077 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。」這條結果中出現的概念在SQL Server幫助文檔中都有解釋
二、邏輯讀取與Profiler中的Reads值是一個概念,可是因爲profile日跟蹤顯示的Reads隨着該查詢使用的SET語句而增加,可是Statistics IO顯示的邏輯讀數量不包含SET語句所訪問的附加頁面,所以,Statistics IO提供的讀操做數量一致。
三、當內存中尚未須要查找的數據時,須要從磁盤讀取,所以物理讀取和預讀都不會爲零;一旦通過一次查詢後,該數值放入緩存,那麼這兩個值將保持爲零。
3、Statistics profiler
顯示語句的配置文件信息。STATISTICS PROFILE 對即席查詢、視圖和存儲過程有效。
參數說明
Rows:執行計劃的每一步返回的實際行數
Executes:執行計劃的每一步被運行了多少次
StmtText:執行計劃的具體內容。執行計劃以一棵樹的形式顯示。每一行都是運行的一步,都會有結果集返回,也都會有本身的cost
EstimateRows:SQLSERVER根據表格上的統計信息,預估的每一步的返回行數。
EstimateIO:SQLSERVER根據EstimateRows和統計信息裏記錄的字段長度,預估的每一步會產生的I/O cost
EstimateCPU:SQLSERVR根據EstimateRows和統計信息裏記錄的字段長度,以及要作的事情的複雜度,預估每一步會產生的CPU cost
TotalSubtreeCost:SQLSERVER根據EstimateIO和EstimateCPU經過某種計算公式,計算出每一步執行計劃子樹的cost
Warnings:警告信息
Parallel:是否使用了並行的執行計劃