原文首發于it168,連結見http://tech.it168.com/a2011/0125/1153/000001153919.shtml
<b>SQLServer2008引擎元件</b>
首先讓我們先來看看SQL Server2008的引擎元件,SQLServer2008有四大元件:協定、關系引擎、存儲引擎和SQLOS。
<b>協定層(Protocol Layer)</b>
當一個應用程式與SQL Server資料庫引擎通訊時,協定層提供的應用程式程式設計接口利用微軟自定義的tabular data stream(TDS)package來規範通訊格式。這一層的意義在于向應用程式提供通路SQL Server的接口。
<b>SQL Server Network Interface(簡稱SNI)</b>
<b>表格格式資料流端點(Tabular Data Stream,簡稱TDS)</b>
TDS是一種微軟的與資料庫進行互動的私有協定,SQL Server在安裝時為其支援的四種協定各建立一個端點,如果協定被激活,那麼所有使用者均可以使用這個協定。此外還有一個專門為專用管理者連接配接(DAC)而設定的端點。
一條SQL語句則會通過TCP/IP連接配接以TDS消息的形式發送給SQL Server。
一旦協定層接收到TDS包,就會在反轉和解包工作,以找到所包含的請求。協定層也負責打包結果和狀态消息,并以TDS消息的形式傳回用戶端。
<b>關系引擎(Relational Engine)</b>
關系引擎又成為查詢處理器,包括用來确定某個查詢所要做的操作及進行這些操作最佳方式的SQL Server元件。同時關系引擎也負責向存儲引擎請求資料時查詢的執行,并處理傳回的結果。
<b>指令解析器(Cmd Parser)</b>
指令解析器處理發送給SQL Server的T-SQL語言事件。它會先檢查T-SQL文法,并傳回任何錯誤資訊用戶端,如果文法有效,就會進一步産生執行計劃或者去查找一個已經存在 的執行計劃。指令解析器通過T-SQL哈希值向位于緩沖池中的Plan Cache發出比對要求,以檢查是否存在該執行計劃;如果不存在則把T-SQL翻譯成可以執行的内部格式,即查詢樹。
<b>查詢優化器(Optimizer)</b>
查詢優化器從指令解析器中擷取查詢樹,并為它的實際執行做準備。
<b>SQL管理器</b>
SQL管理器負責管理與存儲過程及其計劃有關的事務,并負責管理查詢的自動化參數。
<b>資料庫管理器</b>
資料庫管理器管理查詢編譯和查詢優化所需的對中繼資料的通路。
<b>查詢執行器(Query Executor)</b>
查詢執行器運作查詢優化器生成的執行計劃,就像排程員負責排程執行計劃中的所有指令。
<b>存儲引擎(Storage Engine)</b>
存儲引擎包括存取方法、事務管理和緩沖區管理器。
<b>存取方法(Access Methods)</b>
SQL Server需要定位資料庫時,會調用存取方法代碼。它提供了一組代碼,用來建立和請求對資料頁面和索引頁面進行掃描,并且将準備好的OLE DB資料行集傳回給關系引擎。存取方法并不真正進行操作,它隻負責向緩沖區管理器送出請求。
<b>事務管理器(Transaction Manager)</b>
事務管理器包括兩個元件:日志管理器和鎖管理器。
鎖管理器負責資料的并發保護和基于特定隔離級别的管理。日志管理器負責将事務日志提前記錄于日志檔案中,進而起到保護資料的作用。
<b>緩沖區管理器(Buffer Manager)</b>
<b>SQLOS</b>
<b>緩沖池(Buffer Pool)</b>
緩沖池在SQL Server中是記憶體的最大消耗者,主要包括資料緩沖池和執行計劃緩沖池。
<b>執行計劃緩沖池(Plan Cache)</b>
生成執行計劃是比較消耗資源和時間的,是以在Plan Cache緩存這些執行計劃,有助于執行計劃的重用。
<b>資料緩沖池(Data Cache)</b>
資料緩沖池負責将資料頁和索引頁放在資料告訴緩沖池中,以便多個使用者可以共享資料。
<b>SQL查詢示意圖</b>
以下為一條基本的SQL查詢示意圖。

▲
首先用戶端的SNI通過TCP/IP協定和SQL Server服務端的SNI建立連接配接,然後建立連接配接到TDS的連接配接,并以TDS消息的方式傳送SELECT指令。SQL Server服務端的SNI對TDS消息進行解包,并把SQL指令傳給文法解析器;文法解析器在緩沖池中檢查是否存在執行計劃,如果沒有則建立一個查詢 樹,并交給優化器;優化器産生相應的執行計劃;查詢執行器通過OLE DB接口向存儲引擎中的通路存取方法送出請求讀取資料;存取方法則向緩沖區管理器發起資料請求,如果在緩沖池的資料緩沖池中存在相應的資料,如果沒有則從 磁盤上讀取資料頁放到資料緩沖池中,并把資料傳回給存取方法;存取方法在把結果傳回給關系引擎,并最終以TDS消息的形式傳回給用戶端。
本文轉自baoqiangwang51CTO部落格,原文連結:http://blog.51cto.com/baoqiangwang/510480,如需轉載請自行聯系原作者