校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > SQLSERVER收集語句運行的統(tǒng)計信息并進行分析

SQLSERVER收集語句運行的統(tǒng)計信息并進行分析

熱門標簽:承德地圖標注公司名需要花錢嗎 北京400電話辦理多少錢 美團地圖標注商戶認證注冊 浙江穩(wěn)定外呼系統(tǒng)供應商 榕城市地圖標注 電銷外呼系統(tǒng)軟件功能 咸陽電腦外呼系統(tǒng)運營商 慶陽地圖標注 怎么給高德做地圖標注
對于語句的運行,除了執(zhí)行計劃本身,還有一些其他因素要考慮,例如語句的編譯時間、執(zhí)行時間、做了多少次磁盤讀等。

如果DBA能夠把問題語句單獨測試運行,可以在運行前打開下面這三個開關,收集語句運行的統(tǒng)計信息。
這些信息對分析問題很有價值。
復制代碼 代碼如下:

SET STATISTICS TIME ON
SET STATISTICS IO ON
SET STATISTICS PROFILE ON

SET STATISTICS TIME ON
--------------------------------------------------------------------------------
請先來看看SET STATISTICS TIME ON會返回什么信息。先運行語句:
復制代碼 代碼如下:

DBCC DROPCLEANBUFFERS
--清除buffer pool里的所有緩存數(shù)據(jù)
DBCC freeproccache
GO
--清除buffer pool里的所有緩存的執(zhí)行計劃
SET STATISTICS TIME ON
GO
USE [AdventureWorks]
GO
SELECT DISTINCT([ProductID]),[UnitPrice] FROM [dbo].[SalesOrderDetail_test]
WHERE [ProductID]=777
GO
SET STATISTICS TIME OFF
GO

除了結果集之外,SQLSERVER還會返回下面這兩段信息
復制代碼 代碼如下:

SQL Server 分析和編譯時間:
CPU 時間 = 15 毫秒,占用時間 = 104 毫秒。
SQL Server 分析和編譯時間:
CPU 時間 = 0 毫秒,占用時間 = 0 毫秒。
(4 行受影響)
SQL Server 執(zhí)行時間:
CPU 時間 = 171 毫秒,占用時間 = 1903 毫秒。
SQL Server 分析和編譯時間:
CPU 時間 = 0 毫秒,占用時間 = 0 毫秒。

大家知道SQLSERVER執(zhí)行語句是分以下階段:分析-》編譯-》執(zhí)行
根據(jù)表格的統(tǒng)計信息分析出比較合適的執(zhí)行計劃,然后編譯語句,最后執(zhí)行語句

下面說一下上面的輸出是什么意思
--------------------------------------------------------------------------------
1、CPU時間 :這個值的含義指的是在這一步,SQLSERVER所花的純CPU時間是多少。也就是說,語句花了多少CPU資源
2、占用時間 :此值指這一步一共用了多少時間。也就是說,這是語句運行的時間長短,有些動作會發(fā)生I/O操作,產生了I/O等待,或者是遇到阻塞、產生了阻塞等待。總之時間用掉了,但是沒有用CPU資源。所以占用時間比CPU時間長是很正常的 ,但是CPU時間是語句在所有CPU上的時間總和。如果語句使用了多顆CPU,而其他等待幾乎沒有,那么CPU時間大于占用時間也是正常的
3、分析和編譯時間:這一步,就是語句的編譯時間。由于語句運行之前清空了所有執(zhí)行計劃,SQLSERVER必須要對他編譯。
這里的編譯時間就不為0了。由于編譯主要是CPU的運算,所以一般CPU時間和占用時間是差不多的。如果這里相差比較大,就有必要看看SQLSERVER在系統(tǒng)資源上有沒有瓶頸了。
這里他們是一個15毫秒,一個是104毫秒
4、SQLSERVER執(zhí)行時間: 語句真正運行的時間。由于語句是第一次運行,SQLSERVER需要把數(shù)據(jù)從磁盤讀到內存里,這里語句的運行發(fā)生了比較長的I/O等待。所以這里的CPU時間和占用時間差別就很大了,一個是171毫秒,而另一個是1903毫秒

總的來講,這條語句花了104+1903+186=2193毫秒,其中CPU時間為15+171=186毫秒。語句的主要時間應該是都花在了I/O等待上

現(xiàn)在再做一遍語句,但是不清除任何緩存
復制代碼 代碼如下:

SET STATISTICS TIME ON
GO
SELECT DISTINCT([ProductID]),[UnitPrice] FROM [dbo].[SalesOrderDetail_test]
WHERE [ProductID]=777
GO
SET STATISTICS TIME OFF
GO

這次比上次快很多。輸出時間統(tǒng)計信息是:
復制代碼 代碼如下:

SQL Server 分析和編譯時間:
CPU 時間 = 0 毫秒,占用時間 = 0 毫秒。
SQL Server 分析和編譯時間:
CPU 時間 = 0 毫秒,占用時間 = 0 毫秒。
(4 行受影響)
SQL Server 執(zhí)行時間:
CPU 時間 = 156 毫秒,占用時間 = 169 毫秒。
SQL Server 分析和編譯時間:
CPU 時間 = 0 毫秒,占用時間 = 0 毫秒。

由于執(zhí)行計劃被重用,“SQL分析和編譯時間” CPU時間是0,占用時間是0
由于數(shù)據(jù)已經緩存在內存里,不需要從磁盤上讀取,SQL執(zhí)行時間 CPU時間是156,占用時間這次和CPU時間非常接近,是169。

這里省下運行時間1903-169=1734毫秒,從這里可以再次看出,緩存對語句執(zhí)行性能起著至關重要的作用
為了不影響其他測試,請運行下面的語句關閉SET STATISTICS TIME ON
復制代碼 代碼如下:

SET STATISTICS TIME OFF 
GO

SET STATISTICS IO ON
--------------------------------------------------------------------------------
這個開關能夠輸出語句做的物理讀和邏輯讀的數(shù)目。對分析語句的復雜度有很重要的作用
還是以剛才那個查詢作為例子
復制代碼 代碼如下:

DBCC DROPCLEANBUFFERS
GO
SET STATISTICS IO ON
GO
SELECT DISTINCT([ProductID]),[UnitPrice] FROM [dbo].[SalesOrderDetail_test]
WHERE [ProductID]=777
GO

他的返回是: 
(4 行受影響)
表 'SalesOrderDetail_test'。掃描計數(shù) 5,邏輯讀取 15064 次,物理讀取 0 次,預讀 15064 次,lob 邏輯讀取 0 次,lob 物理讀取 0 次,lob 預讀 0 次。
各個輸出的含義是:
--------------------------------------------------------------------------------
表:表的名稱。這里的表就是SalesOrderDetail_test

掃描計數(shù):執(zhí)行的掃描次數(shù)。按照執(zhí)行計劃,表格被掃描了幾次。一般來講大表掃描的次數(shù)越多越不好。唯一的例外是如果執(zhí)行計劃選擇了并發(fā)運行, 由多個thread線程同時做一個表的讀取,每個thread讀其中的一部分,但是這里會顯示所有thread的數(shù)目。也就是有幾個thread在并發(fā)做, 就會有幾個掃描。這時數(shù)目大一點沒問題的。

邏輯讀取:從數(shù)據(jù)緩存讀取的頁數(shù)。頁數(shù)越多,說明查詢要訪問的數(shù)據(jù)量就越大,內存消耗量越大,查詢也就越昂貴。

可以檢查是否應該調整索引,減少掃描的次數(shù),縮小掃描范圍
物理讀取:從磁盤讀取的頁數(shù)
預讀:為進行查詢而預讀入緩存的頁數(shù)
物理讀取+預讀:就是SQLSERVER為了完成這句查詢而從磁盤上讀取的頁數(shù)。如果不為0,說明數(shù)據(jù)沒有緩存在內存里。運行速度一定會受到影響
LOB邏輯讀取:從數(shù)據(jù)緩存讀取的text、ntext、image、大值類型(varchar(max)、nvarchar(max)、varbinary(max))頁的數(shù)目
LOB物理讀取:從磁盤讀取的text、ntext、image、大值類型頁的數(shù)目
LOB預讀:為進行查詢而放入緩存的text、ntext、image、大值類型頁的數(shù)目
然后再來運行一遍,不清空緩存
復制代碼 代碼如下:

SET STATISTICS IO ON
GO
SELECT DISTINCT([ProductID]),[UnitPrice] FROM [dbo].[SalesOrderDetail_test]
WHERE [ProductID]=777
GO

結果集返回:
復制代碼 代碼如下:

1 表 'SalesOrderDetail_test'。掃描計數(shù) 5,邏輯讀取 15064 次,物理讀取 0 次,預讀 0 次,lob 邏輯讀取 0 次,
2 lob 物理讀取 0 次,lob 預讀 0 次。

這次邏輯讀取不變,還是15064頁。但是物理讀取和預讀都是0了。說明數(shù)據(jù)已經緩存在內存里第二次運行不需要再從磁盤上讀一遍,節(jié)省了時間為了不影響其他測試,請運行下面語句關閉SET STATISTICS IO ON
復制代碼 代碼如下:

SET STATISTICS IO OFF
GO

SET STATISTICS PROFILE ON
--------------------------------------------------------------------------------
這是三個設置中返回最復雜的一個,他返回語句的執(zhí)行計劃,以及語句運行在每一步的實際返回行數(shù)統(tǒng)計。
通過這個結果,不僅可以得到執(zhí)行計劃,理解語句執(zhí)行過程,分析語句調優(yōu)方向,也可以判斷SQLSERVER是否
選擇了一個正確的執(zhí)行計劃。
復制代碼 代碼如下:

SET STATISTICS PROFILE ON
GO
SELECT COUNT(b.[SalesOrderID])
FROM [dbo].[SalesOrderHeader_test] a
INNER JOIN [dbo].[SalesOrderDetail_test] b
ON a.[SalesOrderID]=b.[SalesOrderID]
WHERE a.[SalesOrderID]>43659 AND a.[SalesOrderID]53660
GO

返回的結果集很長,下面說一下重要字段
--------------------------------------------------------------------------------

注意:這里是從最下面開始向上看的,也就是說從最下面開始一直執(zhí)行直到得到結果集所以(行1)里的rows字段顯示的值就是這個查詢返回的結果集。

而且有多少行表明SQLSERVER執(zhí)行了多少個步驟,這里有6行,表明SQLSRVER執(zhí)行了6個步驟!!
Rows:執(zhí)行計劃的每一步返回的實際行數(shù)
Executes:執(zhí)行計劃的每一步被運行了多少次
StmtText:執(zhí)行計劃的具體內容。執(zhí)行計劃以一棵樹的形式顯示。每一行都是運行的一步,都會有結果集返回,也都會有自己的cost
EstimateRows:SQLSERVER根據(jù)表格上的統(tǒng)計信息,預估的每一步的返回行數(shù)。在分析執(zhí)行計劃時,我們會經常將Rows和EstimateRows這兩列做對比,先確認SQLSERVER預估得是否正確,以判斷統(tǒng)計信息是否有更新
EstimateIO:SQLSERVER根據(jù)EstimateRows和統(tǒng)計信息里記錄的字段長度,預估的每一步會產生的I/O cost
EstimateCPU:SQLSERVR根據(jù)EstimateRows和統(tǒng)計信息里記錄的字段長度,以及要做的事情的復雜度,預估每一步會產生的CPU cost
TotalSubtreeCost:SQLSERVER根據(jù)EstimateIO和EstimateCPU通過某種計算公式,計算出每一步執(zhí)行計劃子樹的cost (包括這一步自己的cost和他的所有下層步驟的cost總和),下面介紹的cost說的都是這個字段值
Warnings:SQLSERVER在運行每一步時遇到的警告,例如,某一步沒有統(tǒng)計信息支持cost預估等。
Parallel:執(zhí)行計劃的這一步是不是使用了并行的執(zhí)行計劃

從上面結果可以看出執(zhí)行計劃分成4步,其中第一步又分成并列的兩個子步驟

步驟a1(第5行):從[SalesOrderHeader_test]表里找出所有a.[SalesOrderID]>43659 AND a.[SalesOrderID]53660的值
因為表在這個字段上有一個聚集索引,所以SQL可以直接使用這個索引的seek
SQL預測返回10000條記錄,實際也就返回了10000條記錄.。這個預測是準確的。這一步的cost是0.202(totalsubtreecost)
步驟a2(第6行):從[SalesOrderDetail_test]表里找出所有 a.[SalesOrderID]>43659 AND a.[SalesOrderID]53660的值
因為表在這個字段上有一個非聚集索引,所以SQL可以直接使用這個索引的seek 這里能夠看出SQL聰明的地方。雖然查詢語句只定義了[SalesOrderHeader_test]表上有a.[SalesOrderID]>43659 AND a.[SalesOrderID]53660過濾條件,但是根據(jù)語義分析,SQL知道這個條件在[SalesOrderDetail_test]上也為真。所以SQL選擇先把這個條件過濾然后再做join。這樣能夠大大降低join的cost
在這一步SQL預估返回50561條記錄,實際返回50577條。cost是0.127,也不高
步驟b(第4行):將a1和a2兩步得到的結果集做一個join。因為SQL通過預估知道這兩個結果集比較大,所以他直接選擇了Hash Match的join方法。
SQL預估這個join能返回50313行,實際返回50577行。因為SQL在兩張表的[SalesOrderID]上都有統(tǒng)計信息,所以這里的預估非常準確
這一步的cost等于totalsubtreecost減去他的子步驟,0.715-0.202-0.127=0.386。由于預估值非常準確,可以相信這里的cost就是實際每一步的cost
步驟c(第3行):在join返回的結果集基礎上算count(*)的值這一步比較簡單,count(*)的結果總是1,所以預測值是正確的。
其實這一步的cost是根據(jù)上一步(b)join返回的結果集大小預估出來的。我們知道步驟b的預估返回值非常準確,所以這一步的預估cost也不會有什么大問題
這棵子樹的cost是0.745,減去他的子節(jié)點cost,他自己的cost是0.745-0.715=0.03。是花費很小的一步
步驟b(第2行):將步驟c返回的值轉換為int類型,作為結果返回
這一步是上一步的繼續(xù),更為簡單。convert一個值的數(shù)據(jù)類型所要的cost幾乎可以忽略不計。所以這棵子樹的cost和他的子節(jié)點相等,都是0.745。
也就是說,他自己的cost是0
通過這樣的方法,用戶可以了解到語句的執(zhí)行計劃、SQLSERVER預估的準確性、cost的分布
最后說一下:不同SQLSERVER版本,不同機器cost可能會不一樣,例如SQL2005 ,SQL2008
您可能感興趣的文章:
  • SQL Server自動更新統(tǒng)計信息的基本算法
  • sqlserver 統(tǒng)計sql語句大全收藏
  • SQLSERVER語句的執(zhí)行時間顯示的統(tǒng)計結果是什么意思
  • 淺談SQL Server中統(tǒng)計對于查詢的影響分析
  • SQLServer2005 中的幾個統(tǒng)計技巧
  • SQL Server統(tǒng)計信息更新時采樣百分比對數(shù)據(jù)預估準確性的影響詳解

標簽:重慶 昭通 貴州 新鄉(xiāng) 拉薩 呼和浩特 上海 江蘇

巨人網絡通訊聲明:本文標題《SQLSERVER收集語句運行的統(tǒng)計信息并進行分析》,本文關鍵詞  SQLSERVER,收集,語句,運,行的,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQLSERVER收集語句運行的統(tǒng)計信息并進行分析》相關的同類信息!
  • 本頁收集關于SQLSERVER收集語句運行的統(tǒng)計信息并進行分析的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    日韩成人午夜精品| 国产乱码精品1区2区3区| 日日摸夜夜添夜夜添国产精品| 五月天一区二区三区| 中文字幕日韩一区| 日本成人中文字幕| 91色乱码一区二区三区| 欧美挠脚心视频网站| 亚洲自拍偷拍网站| 国内精品伊人久久久久av影院 | 亚洲美女少妇撒尿| 久久久三级国产网站| 亚洲精选免费视频| 国产一区二区导航在线播放| 欧美性大战久久久久久久蜜臀| 欧美成人伊人久久综合网| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 亚洲女同一区二区| 国产制服丝袜一区| 日韩视频免费观看高清完整版在线观看| 国产亚洲短视频| 免费国产亚洲视频| 欧美日韩成人一区二区| 日韩伦理免费电影| 久久99热99| 欧美丰满高潮xxxx喷水动漫| 国产精品国产三级国产专播品爱网| 激情综合五月天| 欧美成人精品高清在线播放| 亚洲天堂久久久久久久| 国产成人精品1024| 久久久久久久久久久99999| 日韩成人av影视| 欧美午夜一区二区三区| 亚洲柠檬福利资源导航| 在线一区二区三区| 日日欢夜夜爽一区| 亚洲精品在线免费播放| 成人免费高清视频在线观看| 亚洲欧美日本韩国| 欧美在线视频全部完| 日韩精品综合一本久道在线视频| 欧美色中文字幕| 亚洲成人三级小说| 欧美电影免费观看高清完整版| 日本不卡视频在线观看| 精品国产髙清在线看国产毛片| 国产专区欧美精品| 中文字幕一区二区三区蜜月| 精品写真视频在线观看| 裸体健美xxxx欧美裸体表演| 久久精品视频在线看| 日本高清无吗v一区| 久久精品噜噜噜成人av农村| 欧美亚洲一区二区在线| 人人狠狠综合久久亚洲| 欧美成人性战久久| 91蜜桃免费观看视频| 日本女优在线视频一区二区| 久久久91精品国产一区二区精品 | 欧美va天堂va视频va在线| 国产成人免费在线| 午夜视频一区二区三区| 久久久蜜臀国产一区二区| 国产精品久久久久久久岛一牛影视 | 亚洲电影第三页| 欧美国产97人人爽人人喊| 欧美一区二区在线不卡| 91精品福利视频| 99久久久免费精品国产一区二区| 另类人妖一区二区av| 香蕉加勒比综合久久| 中文字幕亚洲综合久久菠萝蜜| 26uuu久久综合| 综合激情网...| 中文字幕亚洲一区二区va在线| 精品奇米国产一区二区三区| 91精品综合久久久久久| 欧美日韩国产bt| 欧美一区二区精品| 欧美成人vr18sexvr| 久久你懂得1024| 欧美国产日产图区| 亚洲精品伦理在线| 国产精品欧美一区二区三区| 国产精品自拍三区| 国产高清亚洲一区| thepron国产精品| 色综合中文字幕国产 | 国产日韩精品一区二区三区 | 国产黄色精品网站| av综合在线播放| 欧美色图片你懂的| 日韩三级高清在线| 国产日韩影视精品| 欧美三级日韩三级| 日韩一卡二卡三卡四卡| 国产亚洲成aⅴ人片在线观看| 国产精品久久久久aaaa| 亚洲一区二区偷拍精品| 久久91精品国产91久久小草| 成人免费va视频| 精品剧情v国产在线观看在线| 国产精品国产a级| 日本不卡一二三| 欧美综合在线视频| 国产偷国产偷亚洲高清人白洁 | 成人精品高清在线| 欧美精品aⅴ在线视频| 欧美极品xxx| 久久狠狠亚洲综合| 91免费精品国自产拍在线不卡| 日韩一区二区在线看| 国产精品不卡在线| 国产成人免费xxxxxxxx| 精品国产免费人成电影在线观看四季| 一区二区视频免费在线观看| 国产成人av电影在线| 精品伦理精品一区| 日韩精品免费视频人成| 欧美日韩国产精品成人| 亚洲成人午夜影院| 欧美日韩精品一区二区在线播放 | 91精品在线观看入口| 日本vs亚洲vs韩国一区三区| 欧美日韩卡一卡二| 日本在线播放一区二区三区| 日韩一区二区在线观看| 99精品视频在线播放观看| 欧美一级高清片| 色哟哟一区二区在线观看| 在线观看91av| 麻豆成人av在线| 天天影视涩香欲综合网| 亚洲国产精品t66y| 精品国产91洋老外米糕| 欧美日韩精品欧美日韩精品一综合| 久久99国产精品成人| 婷婷开心久久网| 日韩女优视频免费观看| 国产激情视频一区二区三区欧美 | 不卡一区中文字幕| 亚洲精选视频在线| 欧美xxxx老人做受| 91视频观看视频| 国产乱一区二区| 亚洲成国产人片在线观看| 久久久精品蜜桃| 欧美午夜精品一区二区蜜桃 | 亚洲大片在线观看| 国产精品视频麻豆| 精品国产乱码久久久久久牛牛| a级高清视频欧美日韩| 国产精品一品视频| 日韩电影在线观看电影| 亚洲妇女屁股眼交7| 亚洲最大色网站| 亚洲黄色在线视频| 亚洲午夜电影在线| 亚洲国产综合91精品麻豆 | 91毛片在线观看| 99精品视频中文字幕| 国产91精品在线观看| 国产精品一区一区三区| 九一九一国产精品| 美女视频免费一区| 国产精品一区二区在线观看不卡| 另类成人小视频在线| 青青草原综合久久大伊人精品优势| 一级做a爱片久久| 视频一区视频二区中文字幕| 偷偷要91色婷婷| 激情综合五月婷婷| 91在线视频免费观看| 欧美一区二区三区免费视频| 久久久一区二区三区捆绑**| 国产视频一区不卡| 亚洲一区中文日韩| 免费看日韩精品| 97精品久久久久中文字幕| 91精品国产综合久久久蜜臀粉嫩 | 日韩理论片在线| 久久综合综合久久综合| 日本国产一区二区| 在线电影国产精品| 国产自产2019最新不卡| 精品一区二区在线视频| 7777精品伊人久久久大香线蕉| 中文字幕在线不卡一区二区三区| 国产精品一区一区三区| 26uuu亚洲综合色欧美| 久久精品国产99国产| 9191成人精品久久| 久久国产日韩欧美精品| 欧美一区二区三区爱爱| 亚洲午夜影视影院在线观看| 97久久久精品综合88久久| 国产视频一区二区在线| 成人综合婷婷国产精品久久蜜臀| 欧美大尺度电影在线|