亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

執行計劃--Adhoc和Prepare

2024-07-21 02:51:01
字體:
來源:轉載
供稿:網友
執行計劃--Adhoc和PRepare

在和SQLPass討論adhoc和Prepare時,有各自不同的觀點,我來發表下我的理解,不對之處,敬請指出!

Adhoc(即席查詢):沒有參數化的查詢計劃會被標記為adhoc,adhoc不能理解為該執行計劃不會被重用。

Prepared(預定義):查詢中使用到參數的執行計劃會被標記為Prepared.

在后續測試中,每次測試之前需要清除執行計劃:

--清理執行計劃DBCC FREEPROCCACHE

測試語句執行結束后需要使用以下語句來查看執行計劃:

--查看執行計劃select cp.usecounts as '使用次數',cp.cacheobjtype as '緩存類型',cp.objtype as [對象類型],st.text as 'TSQL',--cp.plan_handle AS '執行計劃',qp.query_plan as '執行計劃',cp.size_in_bytes as '執行計劃占用空間(Byte)'           from sys.dm_exec_cached_plans cpcross apply sys.dm_exec_sql_text(plan_handle) stcross apply sys.dm_exec_query_plan(plan_handle) qpORDER BY[對象類型]

測試1:簡單查詢

--執行兩遍SELECT *FROM [TestDB].[dbo].[TB1] WHERE ID=3

執行結果:

可以看到,生成了一個Adhoc執行計劃和一個Prepared執行計劃,其中Adhoc執行計劃被執行兩次,證明Adhoc執行計劃也是可以被重用的,而Prepared執行計劃是由于“簡單參數化”的原因生成的。

(PS:在該場景中,Adhoc執行計劃最終使用的是Prepared執行計劃來執行的,因此可以發現Prepared的執行計劃占用的空間更多一些)

測試2:使用sp_executesql來實現參數化查詢

--執行兩遍EXEC sp_executesql N'SELECT *FROM [TestDB].[dbo].[TB1] WHERE ID=@ID',N'@ID INT',@ID=2

執行結果:可以看到在TSQL列里有明顯的參數,因此該執行計劃被標記為Prepared,同時該計劃被執行兩遍

測試3:使用sp_executesql來實現非參數化查詢

--執行兩遍EXEC sp_executesql N'SELECT *FROM [TestDB].[dbo].[TB1] WHERE ID=3'

執行結果:

可以看到,即使使用sp_executesql,但由于TSQL里沒有使用參數,因此執行計劃仍然被標記為Adhoc。

測試4:使用sp_executesql來實現混合查詢

--執行兩遍EXEC sp_executesql N'SELECT *FROM [TestDB].[dbo].[TB1] WHERE ID=3 AND C1=@C1',N'@C1 INT',@C1=3

執行結果:

可以發現,只有含有一部分的參數,執行計劃就會被標記為Prepared

測試5:使用sp_executesql來實現混合查詢2

--執行兩遍EXEC sp_executesql N'SELECT *FROM [TestDB].[dbo].[TB1] WHERE ID=3',N'@C1 INT',@C1=3

執行結果在上面的測試中,查詢根本沒有使用到參數C1,但是由于整個查詢里有參數,所以仍被標記為Prepared。

綜上所述,只有查詢計劃里有參數,執行計劃就標記為Prepared,如果沒有參數,就會標記為Adhoc.

SQL SERVER 會在兩個環節考慮是否有可重用執行計劃

1>在解析SQL語句之前,對SQL語句進行hash的到一個key,使用這個key去查找是否存在現成的執行計劃;

2>將SQL解析成語法樹后,再使用語法樹的hash key去尋找是否存在現成的執行計劃。

為證明上述觀點,我們做以下測試:

SELECT *FROM [TestDB].[dbo].[TB1]  WHERE ID=3SELECT * FROM [TestDB].[dbo].[TB1]  WHERE ID=3

測試結果:

兩條語句中有一個空格的差別,因此會生成兩個adhoc執行計劃,但是只會生成一個Prepared執行計劃,表明這兩個Adhoc執行計劃最終都使用該Prepeared的執行計劃。Adhoc執行計劃會調用Prepared執行計劃,但Prepared執行計劃不會調用Adhoc執行計劃,這是兩者的另一區別。

誤區:Adhoc會導致重編譯,Adhoc就是影響性能,就是需要把Adhoc查詢改成Prepared查詢

這個是初學者很容易犯的誤區,容易把問題一刀切,由于我們需要在查詢里使用到不同的變量,如"WHERE ID=1"和"WHERE ID=2"這樣的語句,會生成不同的adhoc的執行計劃,每個執行計劃生成會消耗CPU資源,并需要占用buffer pool里的內存,當頻繁執行這些類似但又不相同的SQL語句時,就會浪費大量的資源,因此需要將之參數化,共用一個執行計劃,尤其在執行復雜SQL(如四五個表做連接查詢)時,查詢優化器需要分析生成很多執行計劃并選擇一種比較合理的執行計劃來執行,消耗很多CPU資源并延長總的SQL執行時間,共用一個執行計劃會大大提升系統性能。

當然,參數化也有其切點,在數據分布不均或參數變動對查詢影響巨大的情況下,參數化反而會導致系統異常,如果“WHERE ID>@ID”語句,當ID=10000000時返回一條數據,而當ID=1是返回10000000條數據,前者適合索引查找,后者適合全表掃描,如果兩者使用同一個執行計劃,并會導致系統性能嚴重下降,此時Adhoc反而更適合。

此外,還有一種情況,當查詢語句特別簡單,簡單到編譯幾乎不消耗資源時,SQL SERVER會選擇不保存這些語句的執行計劃。

在分析執行計劃問題時,需要考慮以下問題:

1>系統是否有過多的adhoc執行計劃占用大量內存

2>這些adhoc的執行頻率和相似度

3>是否可以改寫這些adhoc執行計劃的SQL

4>是否可以使用'optimize for ad hoc workloads'來優化

5>是否可以使用'強制參數化'

推薦閱讀:http://www.cnblogs.com/TeyGao/p/3526804.html

照例要上妹子一張,養眼和招狼:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av手机在线观看| 欧美激情a在线| 国产xxx69麻豆国语对白| 日韩在线欧美在线国产在线| 欧美午夜精品久久久久久人妖| 亚洲精品在线看| 神马久久桃色视频| 福利一区视频在线观看| 在线成人中文字幕| 欧美国产亚洲精品久久久8v| 国产精品一区二区久久久| 亚洲欧美一区二区精品久久久| 国产精品十八以下禁看| 国产亚洲美女精品久久久| 欧美黑人狂野猛交老妇| 亚洲第一精品电影| 奇米影视亚洲狠狠色| 亚洲伊人成综合成人网| 亚洲激情在线观看| 国内精品久久久久| 韩国日本不卡在线| 亚洲精品永久免费精品| 青青久久aⅴ北条麻妃| 国产一区私人高清影院| 成人福利视频网| 国产精品无码专区在线观看| 精品偷拍一区二区三区在线看| 亚洲精品久久久一区二区三区| 国产日产久久高清欧美一区| 韩剧1988在线观看免费完整版| 中日韩美女免费视频网站在线观看| 国产免费亚洲高清| 亚洲精品视频网上网址在线观看| 岛国视频午夜一区免费在线观看| 91日本在线视频| 国产亚洲欧洲在线| 亚洲精品一区二三区不卡| 日韩免费视频在线观看| 国产精品丝袜一区二区三区| 国产999精品视频| 亚洲www在线观看| 亚洲小视频在线| 国产成人一区二区在线| 国产成人一区二区三区小说| 国产精品久久久久久久av电影| 色天天综合狠狠色| 欧美多人爱爱视频网站| 91精品国产91久久久久久不卡| 国产91精品最新在线播放| 欧美性高跟鞋xxxxhd| 欧美激情亚洲综合一区| 中文字幕日韩高清| 日韩av在线网| 国产精品三级久久久久久电影| 亚洲视屏在线播放| 久久不射电影网| 亚洲国产成人在线播放| 亚洲欧美日韩一区二区三区在线| 日韩av免费在线观看| 成人av电影天堂| 亚洲精品视频在线播放| 欧美另类69精品久久久久9999| 中文字幕日韩综合av| 日韩在线激情视频| 91精品国产综合久久久久久久久| 中文字幕欧美亚洲| 亚洲人成网站免费播放| 91精品国产自产在线| 超碰日本道色综合久久综合| 精品女厕一区二区三区| 久久亚洲综合国产精品99麻豆精品福利| 51久久精品夜色国产麻豆| 国产香蕉一区二区三区在线视频| 日本午夜精品理论片a级appf发布| 国产精品久久久久久久9999| 最新69国产成人精品视频免费| 国产精品人成电影在线观看| 亚洲一级免费视频| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲欧美国产精品久久久久久久| 国产在线精品自拍| 欧美日韩精品在线视频| 日韩一区二区欧美| 国产精品欧美一区二区三区奶水| 亚洲精品日韩丝袜精品| 欧美日韩xxx| 亚洲自拍偷拍在线| 亚洲第一网中文字幕| 91久久久久久久一区二区| 成人啪啪免费看| 亚洲欧美三级在线| 欧美壮男野外gaytube| 欧美性生交xxxxxdddd| 国产精品久久久久久一区二区| 国产精品丝袜久久久久久高清| 欧美一级大片视频| 欧美成人精品一区二区三区| 色狠狠av一区二区三区香蕉蜜桃| 日本精品久久久久久久| 日韩美女视频中文字幕| 亚洲精品美女久久| 国产欧美精品日韩精品| 国产精品福利观看| 亚洲欧美成人一区二区在线电影| 久久免费视频观看| 97视频在线观看免费| 亚洲国产精品成人一区二区| 国产精品免费久久久| 91美女福利视频高清| 国产精品中文久久久久久久| 亚洲free嫩bbb| 国产视频久久网| 欧美成人激情在线| 欧美午夜性色大片在线观看| 日韩精品福利在线| 国产精品678| 欧美日韩另类字幕中文| 国产69精品久久久久9| 在线观看视频99| 国产精品亚洲综合天堂夜夜| 日韩中文字幕av| 精品自在线视频| 性欧美长视频免费观看不卡| 精品久久久久久亚洲精品| 国产成人精品在线| 最新国产成人av网站网址麻豆| 国产精品爽爽ⅴa在线观看| 亚洲视频欧美视频| 国产精品jvid在线观看蜜臀| 亚洲一区二区久久久| 亚洲国产高清福利视频| 精品一区电影国产| 国产九九精品视频| 日韩精品免费在线视频| 国产欧美久久一区二区| 欧美亚洲另类在线| 中文字幕免费精品一区高清| 国产亚洲精品激情久久| xvideos成人免费中文版| 国产91色在线|免| 久久久久久国产免费| 亚洲激情自拍图| 992tv成人免费影院| 欧美一区二区三区免费观看| 欧美色播在线播放| 日韩亚洲国产中文字幕| 亚洲国产成人爱av在线播放| 精品中文字幕在线观看| 欧美在线一级va免费观看| 久久av在线看| 精品一区二区三区电影| 日韩欧美视频一区二区三区| 亚洲二区在线播放视频| 另类少妇人与禽zozz0性伦| 亚洲欧美精品伊人久久| 国产精品一区二区久久久| 亚洲www视频| 欧美国产日产韩国视频| 国产精自产拍久久久久久蜜| 欧美成人中文字幕| 91av成人在线| 亚洲精品98久久久久久中文字幕| 国产精品久久久久久久午夜| 亚洲国产黄色片|