SQL執行效率2-執行計劃

如下語句能夠進行SQL 語句執行時間分析,兩個Go之間就是SQL查詢語句sql

 

[sql]  view plain  copy
 
  1. use Work--數據庫名  
  2. go  
  3. set statistics profile on  
  4. set statistics io on  
  5. set statistics time on  
  6. go  
  7. -----(SQL執行語句)  
  8. go  
  9. set statistics profile off  
  10. set statistics io off  
  11. set statistics time off  
  12. go  



運行一次後就能夠在查詢結果的信息標籤下看到統計信息數據庫

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:是否使用了並行的執行計劃

相關文章
相關標籤/搜索