SQL Server2008引擎元件

2021-09-04 15:46:21 字數 3030 閱讀 7831

原文首發於it168,鏈結見

sqlserver2008引擎元件

首先讓我們先來看看sql server2008的引擎元件,sqlserver2008有四大元件:協議、關係引擎、儲存引擎和sqlos。

協議層(protocol layer)

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

sql server network inte***ce(簡稱sni)

sni是在伺服器和客戶端之間建立網路連線的一種協議,他提供一組在資料庫引擎和sql server客戶端使用的api函式。sni代替了sql server2000下的net- libraries元件和mdac元件。

sql server支援共享記憶體(shared memory)、tcp/ip、命名管道(named pipes)、虛擬介面介面卡(virtual inte***ce 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查詢示意圖。

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

SQL Server2008引擎元件

原文首發於it168,鏈結見 sqlserver2008引擎元件 首先讓我們先來看看sql server2008的引擎元件,sqlserver2008有四大元件 協議 關係引擎 儲存引擎和sqlos。協議層 protocol layer 當乙個應用程式與sql server資料庫引擎通訊時,協議層提...

v8引擎和v12引擎 深入V8引擎 AST 2

先宣告一下,這種長系列的大塊頭部落格只能保證盡可能的深入到每一行原始碼,有些 我不樂意深究就寫個注釋說明一下作用。另外,由於本地整理的比較好,部落格就隨心寫了。bool parseprogram parseinfo info,isolate isolate 所需要關心的核心 就是這些,非常簡單,pa...

Sql Server 2008 收縮日誌

收縮日誌 alter database dnname set recovery with no wait goalter database dnname set recovery 簡單模式 gouse dnname godbcc shrinkfile n dnname log 11,truncate...