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

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

淺析SQL Server中的執(zhí)行計劃緩存(下)

2024-08-31 01:03:34
字體:
供稿:網(wǎng)友
這篇文章主要介紹了淺析SQL Server中的執(zhí)行計劃緩存(下)的相關(guān)資料,需要的朋友可以參考下
 

在上篇文章給大家介紹了SQL Server中的執(zhí)行計劃緩存(上),本文繼續(xù)給大家介紹sqlserver執(zhí)行計劃緩存相關(guān)知識,小伙伴們一起學習吧。

簡介

在上篇文章中我們談到了查詢優(yōu)化器和執(zhí)行計劃緩存的關(guān)系,以及其二者之間的沖突。本篇文章中,我們會主要闡述執(zhí)行計劃緩存常見的問題以及一些解決辦法。

將執(zhí)行緩存考慮在內(nèi)時的流程

上篇文章中提到了查詢優(yōu)化器解析語句的過程,當將計劃緩存考慮在內(nèi)時,首先需要查看計劃緩存中是否已經(jīng)有語句的緩存,如果沒有,才會執(zhí)行編譯過程,如果存在則直接利用編譯好的執(zhí)行計劃。因此,完整的過程如圖1所示。

淺析SQL Server中的執(zhí)行計劃緩存(下)

圖1.將計劃緩存考慮在內(nèi)的過程

圖1中我們可以看到,其中有一步需要在緩存中找到計劃的過程。因此不難猜出,只要是這一類查找,一定跑不了散列(Hash)的數(shù)據(jù)結(jié)構(gòu)。通過sys.dm_os_memory_cache_hash_tables這個DMV可以找到有關(guān)該Hash表的一些信息,如圖2所示。這里值得注意的是,當執(zhí)行計劃過多導(dǎo)致散列后的對象在同一個Bucket過多時,則需要額外的Bucket,因此可能會導(dǎo)致查找計劃緩存效率低下。解決辦法是盡量減少在計劃緩存中的計劃個數(shù),我們會在本文后面討論到。

淺析SQL Server中的執(zhí)行計劃緩存(下)

圖2.有關(guān)存儲計劃緩存的HashTable的相關(guān)信息

當出現(xiàn)這類問題時,我們可以在buckets_avg_scan_miss_length列看出問題。這類情況在緩存命中率(SQL Server: Plan Cache-Cache Hit Ratio)比較高,但編譯時間過長時可以作為考慮對象。

參數(shù)化和非參數(shù)化

查詢計劃的唯一標識是查詢語句本身,但假設(shè)語句的主體一樣,而僅僅是查詢條件謂詞不一樣,那在執(zhí)行計劃中算1個執(zhí)行計劃還是兩個執(zhí)行計劃呢?It's Depends。

假設(shè)下面兩個語句,如圖3所示。

淺析SQL Server中的執(zhí)行計劃緩存(下)

圖3.僅僅謂詞條件不一樣的兩個語句

雖然執(zhí)行計劃一樣,但是在執(zhí)行計劃緩存中卻會保留兩份執(zhí)行計劃,如圖4所示。

淺析SQL Server中的執(zhí)行計劃緩存(下)

圖4.同一個語句,不同條件,有兩份不同的執(zhí)行計劃緩存

我們知道,執(zhí)行計劃緩存依靠查詢語句本身來判別緩存,因此上面兩個語句在執(zhí)行計劃緩存中就被視為兩個不同的語句。那么解決該問題的手段就是使得執(zhí)行計劃緩存中的查詢語句一模一樣。

參數(shù)化

    使得僅僅是某些參數(shù)不同,而查詢本身相同的語句可以復(fù)用,就是參數(shù)化的意義所在。比如說圖3中的語句,如果我們啟用了數(shù)據(jù)庫的強制參數(shù)化,或是使用存儲過程等。SQL Server會將這些語句強制參數(shù)話,比如說我們根據(jù)圖5修改了數(shù)據(jù)庫層級的選項。

淺析SQL Server中的執(zhí)行計劃緩存(下)

圖5.數(shù)據(jù)庫層級的選項

此時我們再來執(zhí)行圖3中的兩條語句,通過查詢執(zhí)行計劃緩存,我們發(fā)現(xiàn)變量部分被參數(shù)化了,從而在計劃緩存中的語句變得一致,如圖6所示,從而可以復(fù)用.

淺析SQL Server中的執(zhí)行計劃緩存(下)

圖6.參數(shù)話之后的查詢語句

但是,強制參數(shù)會引起一些問題,查詢優(yōu)化器很多時候就無法根據(jù)統(tǒng)計信息最優(yōu)化一些具體的查詢,比如說不能應(yīng)用一些索引或者該掃描的時候卻查找。所產(chǎn)生的負面影響在上篇文章中已經(jīng)說過,這里就不細說了。

因此對于上面的問題可以有幾種解決辦法。

平衡參數(shù)化和非參數(shù)化

在具體的情況下,參數(shù)化有些時候是好的,但有些時候卻是性能問題的罪魁禍首,下面我們來看幾種平衡這兩者之間關(guān)系的手段。

使用RECOMPILE

當查詢中,不準確的執(zhí)行計劃的成本要高于編譯的成本時,在存儲過程中使用RECOMPILE選項或是在即席查詢中使用RECOMPILE提示使得每次查詢都會重新生成執(zhí)行計劃,該參數(shù)會使得生成的執(zhí)行計劃不會被插入到執(zhí)行計劃緩存中。對于OLAP類查詢來說,不準確的執(zhí)行計劃所耗費的成本往往高于編譯成本太多,所以可以考慮該參數(shù)或選項,您可以如代碼清單1中的查詢所示這樣使用Hint。

SELECT * FROM Sales.CustomerWHERE CustomerID>20000 AND TerritoryID = 4OPTION (recompile)

代碼清單1.使用Recompile

除去我們可以手動提示SQL Server重編譯之外,SQL Server也會在下列條件下自動重編譯:

元數(shù)據(jù)變更,比如說表明稱改變、刪除列、變更數(shù)據(jù)類型等。
統(tǒng)計信息變更。

連接的SET參數(shù)變化,SET ANSI_NULLS等的值不一樣,會導(dǎo)致緩存的執(zhí)行計劃不能被復(fù)用,從而重編譯。這也是為什么我們看到緩存的執(zhí)行計劃中語句一模一樣,但就是不復(fù)用,還需要相關(guān)的參數(shù)一致,這些參數(shù)可以通過sys.dm_exec_plan_attributes來查看。

使用Optimize For參數(shù)

RECOMPILE方式提供了完全不使用計劃緩存的節(jié)奏。但有些時候,特性謂語的執(zhí)行計劃被使用的次數(shù)h更多,比如說,僅僅那些謂語條件產(chǎn)生大量返回結(jié)果集的參數(shù)編譯,我們可以考慮Optimize For參數(shù)。比如我們來看代碼清單2。

DECLARE @vari INTSET @vari=4SELECT * FROM Sales.CustomerWHERE CustomerID>20000 AND TerritoryID = @variOPTION (OPTIMIZE FOR (@vari=4))

代碼清單2.使用OPTIMIZE FOR提示

使用了該參數(shù)會使得緩存的執(zhí)行計劃按照OPTIMIZE FOR后面的謂語條件來生成并緩存執(zhí)行計劃,這也可能造成不在該參數(shù)中的查詢效率低下,但是該參數(shù)是我們選擇的,因此通常我們知道哪些謂語條件會被使用的多一些。

另外,自SQL Server 2008開始多了一個OPTIMIZE FOR UNKNOWN參數(shù),這使得在優(yōu)化查詢的過程中探測作為謂語條件的局部參數(shù)的值,而不是根據(jù)局部變量的初始值去探測統(tǒng)計信息。

在存儲過程中使用局部變量代替存儲過程參數(shù)

在存儲過程中不使用過程參數(shù),而是使用局部變量相當于直接禁用參數(shù)嗅探。畢竟,局部變量的值只有在運行時才能知道,在執(zhí)行計劃被查詢優(yōu)化器編譯時是無法知道該值的,因此強迫查詢分析器使用條件列的平均值進行估計。

雖然這種方式使得參數(shù)估計變得非常不準確,但是會變得非常穩(wěn)定,畢竟統(tǒng)計信息不會變更的過于頻繁。該方式不被推薦,如果可能,盡量使用Optimizer的方式。

代碼清單3展示了這種方式。

CREATE PROC TestForLocalVari@vv INTASDECLARE @vari INTSET @vari=@vvSELECT * FROM Sales.CustomerWHERE CustomerID>20000 AND TerritoryID = @vari

代碼清單3.直接引用局部變量,而不是存儲過程參數(shù)

強制參數(shù)化

在本篇文章的前面已經(jīng)提到過了強制參數(shù)化,這里就不再提了。

使用計劃指導(dǎo)

在某些情況下,我們的環(huán)境不允許我們直接修改SQL語句,比如所不希望破壞代碼的邏輯性或是應(yīng)用程序是第三方開發(fā),因此無論是加HINT或參數(shù)都變得不現(xiàn)實。此時我們可以使用計劃指導(dǎo)。

計劃指導(dǎo)使得查詢語句在由客戶端應(yīng)用程序扔到SQL Server的時候,SQL Server對其加上提示或選項,比如說通過代碼清單4可以看到一個計劃指導(dǎo)的例子。

EXEC sp_create_plan_guide N'MyPlanGuide1',@stmt=N'SELECT * FROM Sales.Customer WHERE CustomerID>20000 AND TerritoryID=@vari',@type=N'sql',@module_or_batch=NULL,@params=N'@vari int',@hints=N'OPTION (RECOMPILE)'

代碼清單4.對我們前面的查詢設(shè)置計劃指導(dǎo)

當加入了計劃指導(dǎo)后,當批處理到達SQL Server時,在查找匹配的計劃緩存時也會去找是否有計劃指導(dǎo)和其相匹配。如果匹配,則應(yīng)用計劃指導(dǎo)中的提示或選項。這里要注意的是,這里@stmt參數(shù)必須和查詢語句中的一句一模一樣,差一個空格都會被認為不匹配。

PARAMETERIZATION SIMPLE

當我們在數(shù)據(jù)庫層級啟用了強制參數(shù)化時,對于特定語句,我們卻不想啟用強制參數(shù)化,我們可以使用PARAMETERIZATION SIMPLE選項,如代碼清單5所示。

DECLARE @stmt NVARCHAR(MAX)DECLARE @params NVARCHAR(MAX)EXEC sp_get_query_template N'SELECT * FROM Sales.Customer WHERE CustomerID>20000 AND TerritoryID=2',@stmt OUTPUT, @params OUTPUTPRINT @stmtPRINT @paramsEXEC sp_create_plan_guide N'MyTemplatePlanGuide', @stmt, N'TEMPLATE', NULL, @params, N'OPTION(PARAMETERIZATION SIMPLE)'

代碼清單5.通過計劃指南對單條語句應(yīng)用簡單參數(shù)化

小結(jié)

執(zhí)行計劃緩存希望盡量重用執(zhí)行計劃,這會減少編譯所消耗的CPU和執(zhí)行緩存所消耗的內(nèi)存。而查詢優(yōu)化器希望盡量生成更精準的執(zhí)行計劃,這勢必會造成大量的執(zhí)行計劃,這不僅僅可能引起重編譯大量消耗CPU,還會造成內(nèi)存壓力,甚至當執(zhí)行計劃緩存過多超過BUCKET的限制時,在緩存中匹配執(zhí)行計劃的步驟也會消耗更多的時間。

因此利用本篇文章中所述的方法基于實際的情況平衡兩者之間的關(guān)系,就變得非常重要。



注:相關(guān)教程知識閱讀請移步到MSSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
美女久久一区| 成人av午夜电影| 波多野结衣91| 182在线视频观看| 国产精品视频一区二区三区四区五区| 国产无遮无挡120秒| 国产又色又爽又黄刺激在线视频| 国产一区在线免费观看| 久久久久亚洲av成人毛片韩| 国产一级黄色av| 欧美色图亚洲激情| 亚洲av无码一区二区乱子伦| 国产传媒视频在线| 欧美午夜精品久久久久久浪潮| 国产精品va在线观看无码| 美女扒开内裤让男人桶| 亚洲第一激情av| 亚洲国产综合在线观看| 无码小电影在线观看网站免费| 国产精品人妖ts系列视频| 日韩欧美一区二区三区免费看| 中文字幕一区二区三区人妻不卡| 8050国产精品久久久久久| 欧美大电影免费观看| 深夜福利91大全| 成人c视频免费高清在线观看| 欧美日韩亚洲国产一区| 麻豆国产高清在线播放| 91久久国产精品91久久性色| 国产情侣一区在线| www欧美xxxx| 国产在线久久久| 3d动漫一区二区三区在线观看| 九九热精品视频在线观看| 热色播在线视频| 国产深夜精品| 裸体xxxx视频在线| 性欧美video视频另类| 欧美成年人视频| 欧美精品成人91久久久久久久| 男裸体无遮挡网站| 久久亚洲一区二区三区明星换脸| 成人在线不卡| 国产肉体ⅹxxx137大胆| 国产精品久久久久永久免费观看| 久久精品国产久精国产爱| 超碰91在线观看| 国产精品视频在线观看| 亚洲精品中文字幕成人片| 夜夜夜夜夜夜操| 蜜桃精品视频在线| 国产精品色视频| juy有坂深雪中文字幕| 亚洲成人第一| 成人av集中营| jizz中国女人| 国产精品久久久91| 岛国视频一区免费观看| 国产美女精品| 久久99热这里只有精品| 精品久久久久久一区二区里番| 欧洲精品久久久久毛片完整版| 一个人www欧美| 91精品久久久久久久91蜜桃| av网址在线播放| 99.玖玖.com| 亚洲午夜精品久久| baoyu135国产精品免费| 杨幂一区欧美专区| 亚洲精品1区2区3区| 国产一区二区三区四区五区在线| 日韩精品亚洲一区二区三区免费| 欧美亚洲免费在线一区| 日本黄色a视频| 午夜精品www| 国产成人一区二区三区影院| 久久精品72免费观看| 亚洲一区二区中文| 欧美国产日韩电影| 国产免费黄色av| 在线视频一区二区免费| 国产露脸国语对白在线| 老司机深夜福利在线观看| 久久av一区二区三区亚洲| a√免费观看在线网址www| 免费日韩视频在线观看| 精品国产成人| 奇米影视第四色7777| 久草手机视频在线观看| 欧美一区二区三区高清视频| 三区四区在线视频| 日韩高清不卡av| 日本在线影院| 国产不卡一卡2卡三卡4卡5卡在线| 免费看啪啪网站| 黄色成人免费网| 亚洲一区二区av在线| 欧美成人精品xxx| 午夜激情一区二区| 麻豆国产入口在线观看免费| 少妇一级淫片免费放中国| 日本国产高清不卡| 五月激情六月婷婷| www.17c.com喷水少妇| 免费黄色小视频在线观看| 丁香色欲久久久久久综合网| 国产女主播在线写真| 18岁免费网站| 免费一级suv好看的国产网站| av免费在线免费| 亚洲福利合集| 久久综合一区二区| 网站黄色在线观看| 国产精品视频一| 视频一区二区综合| 国产精品538一区二区在线| 韩国亚洲精品| 成人激情视频网| 91麻豆天美传媒在线| 国产一级片自拍| 欧美一级一区二区| 欧美日一区二区| 日韩免费av一区| 国产在线观看色| 欧美一卡在线观看| 欧美自拍视频| 日韩电影一区二区三区四区| 欧美国产不卡| 欧美一区二区三区小说| 久久久久国产精品嫩草影院| 欧美边添边摸边做边爱免费| 日韩成人一级片| 中文字幕在线网| 亚洲精品**不卡在线播he| 亚洲一区三区视频在线观看| 97视频中文字幕| 国产成人精品免费视| 在线观看视频你懂的| 亚洲国产1区| 久久久久久三级| 日韩精品视频一区二区三区| 日韩三级视频在线观看| 欧美视频专区一二在线观看| 欧美日韩国产综合久久| 日韩毛片无码永久免费看| 99thz桃花论族在线播放| xfplay资源站色先锋在线观看| av一区二区三| 精品免费视频一卡2卡三卡4卡不卡| 国内精品**久久毛片app| 成年人视频网站免费观看| 欧美日本中文字幕| 国产亚洲污的网站| 蜜桃av一区二区三区电影| av免费在线不卡| 国产.精品.日韩.另类.中文.在线.播放| 少妇一级淫免费放| 女人扒开屁股爽桶30分钟| 久久成人精品一区二区三区| 99青草视频在线播放视| julia中文字幕久久亚洲蜜臀| 亚洲一区二区三区涩| 色婷婷精品国产一区二区三区| 影音先锋中文字幕在线观看| 熟妇人妻系列aⅴ无码专区友真希| 日韩在线一区二区三区| 国产91精品久久久| 黄在线观看网站| 成人免费观看www在线| 神马午夜伦理影院| xf在线a精品一区二区视频网站| 国模精品一区二区| 欧美bbbbb性bbbbb视频| 在线观看免费视频一区二区三区| 国产性xxxx| 91九色美女在线视频| 日本三级电影免费观看| 欧美a级黄色大片| 日韩伦理一区二区| 69国产精品成人在线播放| 亚洲成a人片77777在线播放| 日韩精品一区二区在线| 国产在线看片免费视频在线观看| 国产久一道中文一区| 中文字幕人妻一区二| 美日韩一区二区| 久热中文字幕在线| 91老师国产黑色丝袜在线| 精品3atv在线视频| 青青影院一区二区三区四区| 男人的天堂亚洲一区| 麻豆精品在线播放| 日韩精品中文字幕第1页| 毛片不卡一区二区| 九色在线视频蝌蚪| 四虎影视2018在线播放alocalhost| 亚洲国产精品狼友在线观看| 老熟妇高潮一区二区三区| 亚洲污视频在线观看| 四虎4545www国产精品| 国产99久久精品一区二区300| 亚洲国产精品无码久久久久高潮| 免费在线黄色片| 久久久久久网站| 人妻精品久久久久中文| 国产精品三区在线| 成人h视频在线观看| 欧美一区二区三区久久精品| 国产一区二区久久久久| 国产理论在线观看| 欧美资源一区| 91久久夜色精品国产九色| 91精品国产欧美一区二区| 国产欧美一区二区三区视频在线观看| 欧美成人激情| 亚洲美女黄色片| 一本大道久久a久久精品| 成人国产精品一区| 国产精品美女一区二区三区四区| 精品国一区二区三区| 欧美色综合一区二区三区| 亚洲精品久久| 国产盗摄x88av| 亚洲码无人客一区二区三区| 亚洲一级片在线看| 91精品人妻一区二区三区蜜桃2| 精品久久久久久久人人人人传媒| 日韩美女主播在线视频一区二区三区| 精品视频一区二区三区| av网址观看| 国产一卡二卡在线| 亚洲免费资源在线播放| 欧美在线一级| 天天射综合网站| 中文字幕+乱码+中文字幕| 欧美综合亚洲图片综合区| 国产精品探花视频| 国产亚洲美州欧州综合国| 亚洲午夜一级| 国产午夜在线一区二区三区| 黄色av电影网站| 91亚洲国产成人久久精品网站| 国产精品久久久久久久久久久久久久久久久| 最新中文字幕久久| 国产精品久久久久久一区二区三区| 99久精品国产| 精品国免费一区二区三区| 顶级嫩模一区二区三区| 久久久亚洲国产美女国产盗摄| 影院在线观看全集免费观看| 日韩欧美精品网站| 亚洲一级中文字幕| 久久精品xxxxx| 欧美一区二区三区免费| 手机在线免费观看毛片| 亚洲日本免费| 日本护士...精品国| 国产亚洲精品久久久久久| 亚洲国产三级网| 欧美日韩精品| 免费观看久久久4p| 99久热re在线精品996热视频| 亚洲国产精品99| 女女调教被c哭捆绑喷水百合| 色就是色欧美色图| 成人av资源网| 首播影院在线观看免费观看电视| x88av蜜桃臀一区二区| 黑丝美女一区二区| 免费观看成人www动漫视频| 性感美女激情视频在线观看| 日韩最新中文字幕电影免费看| 国产精品久久在线观看| 亚洲伊人久久综合| 特级西西人体www高清大胆| 日韩精选在线观看| 深夜福利视频在线观看| 妖精视频在线观看| 欧美精品v国产精品v日韩精品| 亚洲av色香蕉一区二区三区| 麻豆91在线观看| 亚洲欧美精品午睡沙发| 中文字幕不卡在线观看| 成午夜精品一区二区三区软件| 亚洲午夜未满十八勿入免费观看全集| 星空大象在线观看免费播放| 国内久久精品视频| 国产精品日韩一区二区免费视频| 性感美女极品91精品| 欧美人与禽性xxxxx杂性| 亚洲欧洲一区二区在线观看| 中文字幕精品一区二区精品| 色狠狠桃花综合| 中文字幕无码人妻少妇免费| 亚洲精品第一国产综合野| 国产又色又爽又黄的| 亚洲大香人伊一本线| 日本精品国语自产拍在线观看| 宅男深夜免费观看视频| 你懂的好爽在线观看| 欧美一级特黄aaa| 日韩av在线网页| 色欧美日韩亚洲| 一区二区三欧美| 日韩亚洲欧美中文在线| 欧美1234区| 青青在线精品| 亚洲成人av在线电影| 成人激情免费视频| 人妻一区二区视频| 亚洲一区二区三区av无码| 欧美电影免费观看网站| 欧美日韩极品在线观看一区| 精品产国自在拍| 五十路亲子中出在线观看| 天天干天天操av| 91成人短视频在线观看| 69久久夜色| 在线观看黄色网| 国产视频你懂的| 免费在线你懂的| 五月婷婷综合在线| 欧美日韩一区二区三区在线视频| 在线一区亚洲| 丰满爆乳一区二区三区| 亚洲久草在线视频| 好男人社区在线视频| 国产成人免费av|