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


為了縮小讀取操作所涉及范圍,本文首先着眼於簡單的SELECT查詢,然后引入執行更新操作有關的附加過程。最后你會讀到,優化性能時SQLServer使用還原工具的相關術語和流程。

 

 

關系和存儲引擎

如圖所示,SQL Server被分為2個主要引擎:關系引擎存儲引擎關系引擎有時也被稱為查詢處理器,因為它的主要功能是查詢優化和執行。它包含檢查查詢語法和准備查詢樹的命令解析器查詢優化器毫無疑問是任何數據庫系統中皇冠上的寶石;查詢執行器對執行(查詢計划)負責。

存儲引擎對所有數據輸入、輸出管理負責。它包含用來處理行、索引、頁、分配和行版本等修改的輸入、輸出請求的存取方法緩存區管理器,與SQL Server主要內存用戶緩沖池打交道。它還包含處理用來維持一致性(ACID)的數據鎖和管理事務日志的事務管理器

緩沖池

在進入查詢生命周期之前你需要知道的其它主要組件是緩沖池,在SQL Server中是最大的內存用戶。緩沖池里包含SQL Server中的所有不同緩存,包括計划緩存和數據緩存,計划緩存會接在透過它生命周期的查詢后的章節談到。

一個簡單的SELECT查詢

在這個例子中,使用的查詢細節不重要——沒有join的簡單SELECT語句,因為你只是發起一起簡單的讀取請求。從客戶端開始,那里你首先接觸的組件是SQL Server網絡接口(SNI)。

SQL Server網絡接口(SNI)

SQL Server網絡接口(SNI)是建立客戶端和服務器端網絡連接的協議層。它由數據庫引擎和SQL Server本地客戶(SQL Server Native Client:SNAC)都用到的一系列API組成。SNI代表在SQL Server 2000里建立的網絡庫和包含在操作系統里的微軟數據訪問組件(Microsoft Data Access Components:MDAC)。

SNI不是被直接配置的;你要配置在客戶端和服務器端的網絡協議。SQL Server支持下列協議:

  • 共享內存(Shared memory)——簡單、快速,共享內存是用來連接本地(與SQL Server一樣的計算機)運行客戶端的默認協議。只能用在本地,沒有配置屬性,當從本地機器連接時始終是首次嘗試的。
  • TCP/IP——這是最常用於SQL Server的訪問協議。它通過指定IP地址和端口號使你可以連接到SQL Server。通常,當你指定一個連接實例時它會自動發生。你的內部命名解析系統解析實例名的主機名為IP地址,不管你為默認實例連接到默認TCP 1433端口還是用SQL瀏覽服務為命名實例使用UDP 1434找到正確的端口。
  • 命名管道(Named Pipes)——TCP/IP和命名管道(Named Pipes)是在架構里被使用的兼容協議。命名管道(Named Pipes)被開發來用於局域網(LANs),但也可以被不高效的用於低速網絡,例如廣域網(WANs)。

使用命名管道(Named Pipes)首先需要在為SQL Server配置管理器(SQL Server Configuration Manager)使它生效(如果你要遠程連接的話),然后創建一個使用命名管道(Named Pipes)作為協議連接到服務器的SQL Server別名。

命名管道(Named Pipes)使用TCP 445端口,在2個電腦間的任何防火牆里請確保這個端口被打開,包括Windows防火牆。

  • VIA——虛擬接口適配器(Virtual Interface Adapter:VIA)是兩個系統間高性能通訊的協議,它需要在終端和專門連接口都要有特制硬件。

與命名管道(Named Pipes)一樣,使用VIA協議首先需要在為SQL Server配置管理器(SQL Server Configuration Manager)使它生效,然后創建一個使用虛擬接口適配器(Virtual Interface Adapter:VIA)作為協議連接到服務器的SQL Server別名.雖然SQL Server 2012還支持VIA協議,從以后的版本開始它會被移除,因為新安裝時需要避免這個協議被安裝。

不管使用哪種協議,一旦連接被建立,SQL Server網絡接口(SNI)在服務器上與表格數據流(TDS)終結點(下面會介紹)創建一個完全連接,用它來發送請求和接收數據。這里追隨透過它生命周期的查詢的目的是,你發送SELECT語句且在等待接收結果集。

表格數據流終結點(Tabular Data Stream(TDS) Endpoints

TDS是微軟所有最先由Sybase設計用來與數據庫服務器交互的協議。使用例如TCP/IP的網絡協議一旦連接被接通,與相關TDS終結點的聯系會被創建,它在客戶端與服務器端之間擔當着通信點。

每個網絡協議都有一個TDS終結點,並且還有一個會被專用網絡連接(dedicated administrator connection:DAC)使用。一旦連通性被創建,TDS消息會被用做客戶端與服務器端間的溝通。

SELECT語句是穿過TCP/IP協議(TCP/IP是默認協議)作為TDS消息發送給SQL Server。

協議層(Protocal Layer)

當SQL Server中的協議層(Protocal Layer)收到你的TDS包,它會倒轉SQL Server網絡接口(SNI)的工作,把包拆開找出里面包含的請求是什么。協議層(Protocal Layer)同樣對把結果和狀態消息打包並作為TDS消息發回給客戶端負責。

我們的SELECT語句在TDS包里標記為”SQL命令“類型的消息,因為它傳給下一個組件,命令分析器(Command Parser),開始走向執行的道路。

上圖顯示了我們的查詢現在到哪里了。在客戶端,語句被SQL Server網絡接口(SNI)打包在TDS包里並發送給SQL Server中的協議層(Protocal Layer),在那里被拆包,識別為SQL命令,這個代碼被SQL Server網絡接口(SNI)發送給命令解析器(Command Parser)。

命令分析器(Command Parser)

命令分析器(Comamnd Parser)的角色是處理T-SQL語言事件(language events)。它首先檢查語法並通過協議層(protocol layer)返回給客戶端任何語法錯誤。如果語法是有效的,然后下一步就是生成查詢計划(query plan)或查找已存在的計划。查詢計划(query plan)包含SQL Server將如何去執行這段代碼的細節。它通常被稱為執行計划(execution plan)。

為了檢查查詢計划(query plan),命令分析器(Comamnd Parser)會生成T-SQL的散列(hash)並核對計划緩存(plan cache)來決定是否有合適的計划已經存在。計划緩存(plan cache)是在緩沖池(buffer pool)里用來緩存查詢計划(query plan)的區域。如果找到匹配的,從緩存里這個計划會被讀取並傳給查詢執行器(Query Executor)去執行。(下一篇將介紹如果沒有找到匹配會發生什么。)

參考文章:

http://mscerts.wmlcloud.com/sql_server/SQL%20Server%202012%20%20%20SQL%20Server%20Architecture%20-%20THE%20LIFE%20CYCLE%20OF%20A%20QUERY%20(part%201).aspx 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM