SQL Server2008引擎元件

bq_wang發表於2011-03-09
原文首發於it168,連結見http://tech.it168.com/a2011/0125/1153/000001153919.shtml

  SQLServer2008引擎元件

  首先讓我們先來看看SQL Server2008的引擎元件,SQLServer2008有四大元件:協議、關係引擎、儲存引擎和SQLOS。

  協議層(Protocol Layer)

  當一個應用程式與SQL Server資料庫引擎通訊時,協議層提供的應用程式程式設計介面利用微軟自定義的tabular data stream(TDS)package來規範通訊格式。這一層的意義在於嚮應用程式提供訪問SQL Server的介面。

  SQL Server Network Interface(簡稱SNI)

  SNI是在伺服器和客戶端之間建立網路連線的一種協議,他提供一組在資料庫引擎和SQL Server客戶端使用的API函式。SNI代替了SQL Server2000下的Net- Libraries元件和MDAC元件。

  SQL Server支援共享記憶體(Shared memory)、TCP/IP、命名管道(Named Pipes)、虛擬介面介面卡(Virtual Interface Adapter,即VIA)四種協議。

  一旦建立連線,SNI就會向伺服器的TDS斷點建立一條安全的連線,用來進行資料的請求和返回。

  表格格式資料流端點(Tabular Data Stream,簡稱TDS)

  TDS是一種微軟的與資料庫進行互動的私有協議,SQL Server在安裝時為其支援的四種協議各建立一個端點,如果協議被啟用,那麼所有使用者均可以使用這個協議。此外還有一個專門為專用管理員連線(DAC)而設定的端點。

  一條SQL語句則會通過TCP/IP連線以TDS訊息的形式傳送給SQL Server。

  協議層(Protocol Layer)

  一旦協議層接收到TDS包,就會在反轉和解包工作,以找到所包含的請求。協議層也負責打包結果和狀態訊息,並以TDS訊息的形式返回客戶端。

  關係引擎(Relational Engine)

  關係引擎又成為查詢處理器,包括用來確定某個查詢所要做的操作及進行這些操作最佳方式的SQL Server元件。同時關係引擎也負責向儲存引擎請求資料時查詢的執行,並處理返回的結果。

  命令解析器(Cmd Parser)

   命令解析器處理髮送給SQL Server的T-SQL語言事件。它會先檢查T-SQL語法,並返回任何錯誤資訊客戶端,如果語法有效,就會進一步產生執行計劃或者去查詢一個已經存在 的執行計劃。命令解析器通過T-SQL雜湊值向位於緩衝池中的Plan Cache發出匹配要求,以檢查是否存在該執行計劃;如果不存在則把T-SQL翻譯成可以執行的內部格式,即查詢樹。

  查詢優化器(Optimizer)

  查詢優化器從命令解析器中獲取查詢樹,併為它的實際執行做準備。

  生成執行計劃的第一步是對每個查詢進行規範化,規範化的過程有可能將單個查詢分解成多個粒度合適的查詢。然後進行最優化,SQL Server的查詢優化器是基於成本的,它會選擇它認為成本最低的執行計劃,它使用一些內部指標(記憶體需求、CPU利用率和I/O需求數目)作為選擇的依據。此外查詢優化器還會考慮請求語句的型別、檢查受到影響的各表的資料量、表中的索引,以及SQL Server統計資料。

  SQL管理器

  SQL管理器負責管理與儲存過程及其計劃有關的事務,並負責管理查詢的自動化引數。

  資料庫管理器

  資料庫管理器管理查詢編譯和查詢優化所需的對後設資料的訪問。

  查詢執行器(Query Executor)

  查詢執行器執行查詢優化器生成的執行計劃,就像排程員負責排程執行計劃中的所有命令。


  儲存引擎(Storage Engine)

  儲存引擎包括存取方法、事務管理和緩衝區管理器。

  存取方法(Access Methods)

  SQL Server需要定位資料庫時,會呼叫存取方法程式碼。它提供了一組程式碼,用來建立和請求對資料頁面和索引頁面進行掃描,並且將準備好的OLE DB資料行集返回給關係引擎。存取方法並不真正進行操作,它只負責向緩衝區管理器發出請求。

  事務管理器(Transaction Manager)

  事務管理器包括兩個元件:日誌管理器和鎖管理器。

  鎖管理器負責資料的併發保護和基於特定隔離級別的管理。日誌管理器負責將事務日誌提前記錄於日誌檔案中,從而起到保護資料的作用。

  緩衝區管理器(Buffer Manager)

  緩衝區管理器用來管理緩衝區記憶體池中資料頁面的分佈。

  SQLOS

  SQLOS則可以理解為SQL Server2008的作業系統,主要負責處理與作業系統之間的工作,SQL Server通過該介面層向作業系統申請記憶體分配、排程資源、管理程式和執行緒以及同步物件。

  緩衝池(Buffer Pool)

  緩衝池在SQL Server中是記憶體的最大消耗者,主要包括資料緩衝池和執行計劃緩衝池。

  執行計劃緩衝池(Plan Cache)

  生成執行計劃是比較消耗資源和時間的,因此在Plan Cache快取這些執行計劃,有助於執行計劃的重用。

  資料緩衝池(Data Cache)

  資料緩衝池負責將資料頁和索引頁放在資料告訴緩衝池中,以便多個使用者可以共享資料。

  SQL查詢示意圖

  以下為一條基本的SQL查詢示意圖。

儲存引擎(Storage Engine)

   首先客戶端的SNI通過TCP/IP協議和SQL Server服務端的SNI建立連線,然後建立連線到TDS的連線,並以TDS訊息的方式傳送SELECT命令。SQL Server服務端的SNI對TDS訊息進行解包,並把SQL命令傳給語法解析器;語法解析器在緩衝池中檢查是否存在執行計劃,如果沒有則建立一個查詢 樹,並交給優化器;優化器產生相應的執行計劃;查詢執行器通過OLE DB介面向儲存引擎中的訪問存取方法發出請求讀取資料;存取方法則向緩衝區管理器發起資料請求,如果在緩衝池的資料緩衝池中存在相應的資料,如果沒有則從 磁碟上讀取資料頁放到資料緩衝池中,並把資料返回給存取方法;存取方法在把結果返回給關係引擎,並最終以TDS訊息的形式返回給客戶端。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-688788/,如需轉載,請註明出處,否則將追究法律責任。

相關文章