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

首頁 > 數據庫 > SQL Server > 正文

SQL Server 2012:SQL Server體系結構——一個查詢的生命周期(第2部分)

2024-08-31 00:54:34
字體:
來源:轉載
供稿:網友
SQL Server 2012:SQL Server體系結構——一個查詢的生命周期(第2部分)計劃緩存(Plan Cache)

如果SQL Server已經找到一個好的方式去執行一段代碼時,應該把它作為隨后的請求重用,因為生成執行計劃是耗費時間且資源密集的,這樣做是有有意義的。

如果沒找到被緩存的計劃,然后命令分析器(Command Parser)在T-SQL基礎上生成一個查詢樹(query tree)。查詢樹(query tree)的內部結構是通過樹上的每個結點代表查詢中需要的執行操作。這個樹然后被傳給查詢優化器(Query Optimizer)去處理。我們的簡單查詢沒有一個存在的計劃,因此一個查詢樹(query tree)會被創建,然后傳給查詢優化器(Query Optimizer)。

上圖展示了命令分析器(Command Parser)是用來檢查現存執行計劃的計劃緩存(plan cache),因為在緩存里沒找到我們查詢的任何信息,還有從命令分析器(Command Parser)輸出傳給優化器的查詢樹(query tree)。

查詢優化器(Query Optimizer)是被SQL Server團隊視為最有價值的財產,也是產品中最復雜、機密的部分之一。幸運的是,只有底層的算法和源代碼被很好保護(即使在微軟內部),優化器如何工作才能被研究和監視。

這個所謂的基于成本(cost-based)的優化器,意味要去評估執行查詢的各種方式,然后選擇被認為擁有最小成本的方式去執行。執行方式以查詢計劃(query plan)實現并從查詢優化器(Query Optimizer)輸出。

基于剛才的介紹,你認為優化器的工作是找到最好的查詢計劃會被原諒的,因為那看起來是很明顯的設想。然而它的實際工作是在一段時間內找到好的計劃,而不是最佳計劃。優化器的目標通常被描述為找最有效率的計劃。

如果優化器每次都嘗試去找最好的計劃,比起執行一個慢的計劃,找個最好的計劃花費的時間更長(一些內建的試探法實際上在保證優化器從不花更長的時間找到好計劃,而是就找一個計劃并執行它)。

優化器同樣在成本的基礎執行多級優化,在每一階段增加更多可用選擇項來找更好的計劃。當一個好計劃被找到時,優化器就停在那一階段了。

第1階段被稱之為預優化,當語句是足夠簡單而只有一個最佳計劃時,在第一階段就退出剩下的步驟,移除額外成本需要。沒有join的基本查詢被認為簡單,計劃成本產出為0,然后被提及為普通計劃(trivial plans)。

優化實際上開始的下一階段包含三個查找時期:

  • 第0時期——這個時期優化器會找內循環連接(nested loop joins)且不考慮并行運算符(parallel Operators)。

如果已經找到的計劃成本小于0.2,優化器會停在這里。在這個階段生成的計劃稱為事務處理(transaction PRocessing)或簡稱TP計劃。

  • 第1時期——第1時期使用可用優化規則的子集來找常用格式(common patterns)的已有計劃。

如果已經知道的計劃成本小于1.0,優化器會停在這里。這個階段生成的計劃被稱為快速計劃(quick plans)。

  • 第2時期——在這個最后時期優化器全力以赴(pulls out all the stops)使用它所有的優化規則。它同樣也會找下并行(parallelism)和索引視圖(indexed views)(如果你運行的是企業版(Enterprise Edition))。

第2時期的完成是找到計劃的成本對優化需要的時間之間的平衡。在這個時期生成的計劃有完全級別(level of "Full")的優化。

它的花費需要多少?

這里提及的花費不能用多少秒或其他有意義的表達來衡量;它只是標記代表計劃資源消耗值的一個任意數。然而,在早期的微軟SQL Server世界里,它的起源是在桌面電腦上的基準檢查程序(benchmark)(跑分)。

在計劃里,每個運算符都有一個底線成本,然后用它來乘以行的大小和預計行數來獲得那個運算符的成本,計劃成本就是這些所有運算符的成本。

因為成本來自于底線值且與你的硬件速度無關,在每個SQL Server裝置(同比版本 like-for-like version。博主注:與版本無關。)里生成每個計劃的成本是一樣的。

因為我們的SELECT查詢非常簡單,它退出在預優化時期的操作,因為這個計劃對優化器非常明顯(一個普通計劃)。現在已經有查詢計劃了,它向查詢執行器(Query Executor)去執行。

查詢執行器(Query Executor)

查詢執行器的工作是不釋自明的,它執行查詢。更準確的說,它通過干完包含與存儲引擎相互作用的檢索或修改數據的每一步來執行查詢。

(此處有信息需要完善…………)

這個SELECT查詢需要檢索數據,因此請求傳給存儲引擎(Storage Engine)通過OLE DB接口傳給存取方法(access Methods)。

上圖展示了作為優化器的輸出的執行計劃(query plan)正傳給查詢執行器(Query Executor),同時引入了存儲引擎(Storage Engine),它被查詢執行器(Query Executor)通過OLE作為接口給存取方法(Access Methods)。

存取方法(Access Methods)

存取方法是為你數據和索引提供存儲結構,還有通過數據檢索或數據修改接口的一批代碼。它包含檢索數據的所有代碼單本身不執行操作,它向緩存區管理器(Buffer Manager)傳遞請求。

假設我們的SELECT語句需要讀取一些記錄行的數據剛好在一頁。存取方法(Access Methods)的代碼會讓緩存區管理器(Buffer Manager)檢索頁,因此它可以準備一個OLE DB的記錄集傳回給關系引擎(Relational Engine)。

緩存區管理器(Buffer Manager)

緩存區管理器(Buffer Manager),如名所示,管理緩沖池(buffer pool),它代表著SQL Server的主要內存使用。如果你需要從頁讀一些記錄行(當我們談論UPDATE查詢時會提及修改數據),緩存區管理器(Buffer Manager)在緩沖池(buffer pool)檢查數據緩存看看在內存里是否有被緩存的這頁。如果這頁已被緩存了,結果就會傳回給存取方法(Access Methods)。

如果這頁沒被緩存,然后緩存區管理器(Buffer Manager)從磁盤里拿這頁,把它放入數據緩存(Data Cache),然后把結果傳回給存取方法(Access Methods)。

你這里要記住的要點是你永遠只和內存中的數據打交道。在作為記錄集返回前,你請求的每個新的數據讀取,首先從磁盤讀取,然后寫回內存(數據緩存(the data cache))。

這就是為什么SQL Server需要在內存里保持最小級別的可用頁面;如果第一時間在緩存里沒有空間來放數據,你就不能讀取任何新數據。

存取方法(Access Methods)代碼決定SELECT查詢需要一個新頁,因此它向緩存區管理器(Buffer Manager)拿。緩存區管理器(Buffer Manager)檢查它是否已在數據緩存(data cache),如果沒找到的話就從磁盤加載到緩存。

數據緩存(Data Cache)

數據緩存一直是緩沖池(buffer pool)最大一部分;因此也是在SQL Server最大內存用戶。這里每個從磁盤讀取的數據頁在被用之前都會被寫回。

這個sys.dm_os_buffer_descriptors動態管理視圖(DMV)每一行代表當前內存持有的每個數據頁,你可以用這個腳本看看在數據緩存區(Data Cache)每個數據庫占用多少空間:

1 SELECT count(*)*8/1024 AS 'Cached Size (MB)'2    ,CASE database_id3         WHEN 32767 THEN 'ResourceDb'4         ELSE db_name(database_id)5         END AS 'Database'6 FROM sys.dm_os_buffer_descriptors7 GROUP BY db_name(database_id),database_id8 ORDER BY 'Cached Size (MB)' DESC

輸出結果看起來會類似如下:

Cached Size (MB) Database

3287 People

34 tempdb

12 ResourceDb

4 msdb

這個例子里,People數據庫在數據緩存(Data Cache)里有3287 MB數據頁。

頁在緩存里停留時間量由最近最少使用(least recently used:LRU)策略決定。

(此處有信息待完善………………)

一個簡單SELECT語句(查詢)生命周期總結

SELECT查詢的整個生命周期在這里被介紹:

  1. 在客戶端的SQL Server網絡接口(SNI)與在SQL Server使用例如TCP/IP的網絡協議的網絡接口(SNI)建立連接。然后在TCP/IP連接上建立與TDS終結點的聯系并發送SELECT語句作為TDS消息發送給SQL Server。
  2. 在SQL Server上的SNI把TDS消息拆包,讀取SELECT語句,傳送一個“SQL命令”給命令分析器。
  3. 命令分析器在緩沖池檢查計劃緩存是否存在,與語句匹配的可用查詢計劃被命令分析器接收。如果沒有找到它,基于SELECT語句創建查詢樹傳給優化器來生成查詢計劃。
  4. 優化器在預編譯生成零成本計劃或普通計劃,因為這個語句太簡單了。生成的查詢計劃然后傳給查詢執行器去執行。
  5. 在執行時,查詢執行器決定讀取需要的數據來完整這個查詢計劃,因此通過OLE DB接口把請求傳給在存儲引擎里的存取方法。
  6. 存取方法需要從數據庫里讀一個頁來完成來自查詢執行器的請求,它讓緩存區管理器來提供這個頁。
  7. 緩存區管理器檢查數據緩存看看它在緩存里是否已有。它不在緩存,因此從磁盤里拿這個頁,放入緩存,傳回給存取方法。
  8. 最后,存取方法把結果集送回給關系引擎發回給客戶端。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美亚洲另类制服自拍| 96pao国产成视频永久免费| 久久精品男人天堂| 欧美日韩一区二区在线| 97精品伊人久久久大香线蕉| 久久国产精品久久久久久| 亚洲国产精品视频在线观看| 国产亚洲精品久久久久久777| 国语自产偷拍精品视频偷| 97视频色精品| 国产精品美女午夜av| 欧美最顶级丰满的aⅴ艳星| 另类少妇人与禽zozz0性伦| 日韩av成人在线| 国产在线播放91| 91精品在线观看视频| 欧美日韩成人在线视频| 91精品综合视频| 欧美激情综合色| 亚洲成av人片在线观看香蕉| 久久久av电影| 亚洲国产精品久久精品怡红院| 国产精品免费网站| 久久噜噜噜精品国产亚洲综合| 亚洲91av视频| 欧美激情欧美狂野欧美精品| 亚洲影院色在线观看免费| 性欧美在线看片a免费观看| 欧美亚洲国产成人精品| 亚洲国产天堂网精品网站| 久99九色视频在线观看| 国产经典一区二区| 欧美高清电影在线看| 国产精品久久久久久久久免费| 亚洲直播在线一区| 九色成人免费视频| 日韩精品视频在线| 九九热r在线视频精品| 久久久免费精品| 91伊人影院在线播放| 伊人激情综合网| 夜夜狂射影院欧美极品| 久久久久久国产精品美女| 国产精品免费一区二区三区都可以| 欧美激情女人20p| 一区二区在线视频| 国产日韩换脸av一区在线观看| 欧美成人h版在线观看| 福利二区91精品bt7086| 热99精品里视频精品| 亚洲人成自拍网站| 色在人av网站天堂精品| 亚洲男人天堂网| 国产精品一区二区在线| 欧美日韩激情视频8区| 精品欧美一区二区三区| 最近2019年中文视频免费在线观看| 一区二区在线视频播放| 国产精品久久久久av| 中文字幕亚洲国产| 欧洲精品在线视频| 亚洲国产欧美一区二区三区同亚洲| 欧洲精品毛片网站| 亚洲美女性视频| 欧美午夜精品久久久久久人妖| 中文字幕精品一区久久久久| 欧美性猛交xxxx富婆| 欧美激情精品久久久久久大尺度| 国产一区二区三区在线| 成人福利免费观看| 国产精品高潮呻吟久久av野狼| 久久青草精品视频免费观看| 色哟哟亚洲精品一区二区| 亚洲女人被黑人巨大进入| 日韩精品999| 美女啪啪无遮挡免费久久网站| 日韩在线免费视频| 亚洲欧美日韩中文在线| 久久亚洲欧美日韩精品专区| 亚洲欧美在线免费| 26uuu另类亚洲欧美日本老年| 国产欧美精品一区二区三区-老狼| 91在线视频导航| 日本久久久久久久| 久久精品一偷一偷国产| 久久久久久国产三级电影| 欧美视频在线视频| 国产成人一区三区| 国产精品va在线播放我和闺蜜| 国产精品福利在线| 亚洲xxxx18| 亚洲精品国产精品国自产在线| 久久久极品av| 成人精品久久久| 日韩视频在线免费| 日韩免费不卡av| 日韩av在线导航| 欧美日韩激情视频8区| 日韩免费av在线| 亚洲成人av中文字幕| 中文字幕精品在线| 深夜福利亚洲导航| 97成人精品视频在线观看| 久久全球大尺度高清视频| 97久久精品人搡人人玩| 精品国内自产拍在线观看| 中文字幕欧美日韩在线| 8090成年在线看片午夜| 精品自在线视频| 热久久免费国产视频| 另类少妇人与禽zozz0性伦| 亚洲美女性生活视频| 国产99久久精品一区二区| 欧美另类极品videosbest最新版本| 欧美香蕉大胸在线视频观看| 欧美视频在线观看免费网址| 欧美日韩加勒比精品一区| 精品中文字幕在线2019| 久久久久国产精品www| 免费不卡在线观看av| 亚洲色图色老头| 欧美日韩电影在线观看| 亚洲免费av网址| 欧美插天视频在线播放| 久久在线精品视频| 国产精品7m视频| 91香蕉亚洲精品| 91精品国产色综合久久不卡98口| 日日摸夜夜添一区| 日韩av在线看| 91在线免费观看网站| 午夜精品久久久久久久白皮肤| 精品成人国产在线观看男人呻吟| 国产精品户外野外| 综合欧美国产视频二区| 国产亚洲精品美女| 最近中文字幕2019免费| 日韩av一区二区在线| 91精品啪在线观看麻豆免费| 国产欧美精品在线| 8x拔播拔播x8国产精品| 欧美激情一区二区三区久久久| 欧美三级xxx| 亚洲国产精彩中文乱码av| 国产精品自在线| 日韩毛片在线观看| 中文字幕av一区二区三区谷原希美| 91精品国产综合久久久久久久久| 久久国内精品一国内精品| 国产精品第2页| 成人黄色激情网| 日韩av网站在线| 亚洲黄色在线看| 亚洲精品白浆高清久久久久久| 精品亚洲国产成av人片传媒| 久久综合久久八八| 国产精品欧美亚洲777777| 久久影院资源站| 午夜精品国产精品大乳美女| 久久久国产91| 91国产美女在线观看| 欧美大片网站在线观看| 国产精品亚洲激情| 欧美激情一二区|