關於SQLServer2005 的學習筆記(二)——體系結構一
SQLServer2005 引擎組件
首先讓我們先來看看 SQL Server2005 的引擎組件, SQLServer2005 有四大組件:協議、關系引擎、存儲引擎和 SQLOS 。
協議層接收來自於用戶的請求(查詢、更改、刪除、創建表等等操作)並把它們轉換成關系引擎能夠識別的形式。它還能夠獲取任意查詢、狀態信息、錯誤信息的結果,然後把這些結果轉換成客戶端能夠理解的性,最後再返回客戶端。這一層的意義在於是應用程序訪問 SQL Server 的接口。
關系引擎層能夠接收 SQL 批處理,以及決定如何處理。它能夠解析、編譯和優化請求並檢查批處理的執行過程,對於所需的數據會發送數據請求給存儲引擎。這一層的主要是解析、編譯和優化,生成語法樹,並與存儲引擎進行交互。
存儲引擎則負責管理 所有的數據訪問,包括基於事務的命令和大批量操作。這些操作包括備份 、批量插入和某些數據庫 一致性檢查。根據圖上所示,主要是實現數據的訪問、數據的緩存、鎖的管理等操作。
SQLOS 則可以理解為 SQL Server2005 的操作系統,主要負責處理與操作系統之間的工作,如何進行內存分配、死鎖檢查、 I/O 操作等;很難說的清楚 SQLOS 是 SQLServer 自己獨有的處理機制呢,還是調用 OS 來完成相關處理的。
SQLServer2000 引擎結構
我們再回頭看看 SQLServer2000 的組件關系,在 SQLServer2000 聯機幫助中基本上缺乏相關 detail 的體系架構圖,該圖主要也是描述了 SQLServer2000 中各個主要組件之間的層次和調用關系;而且我對 SQLServer2000 的體系結構也缺乏深刻認識,再次不做詳述。
Oracle 體系架構
對於 Oracle 而言, Oracle 並沒有提供一個比較全面的組件架構,而是認為 Oracle 就是數據庫和實例的集合,當然我們也可以把 SGA 各個組成部分、 Oracle 各種進程、各種數據庫文件視為其組件。實例是由 SGA 和 Oracle 進程構成的。每一個運行的 Oracle 數據庫都與一個 Oracle 實例關聯。 Oracle 數據庫使用內存結構和進程來管理、訪問數據庫。所有內存結構都存在於構成數據庫服務器的計算機的主存中。進程指的是在這些計算機內存中運行的作業。進程被定義為“控制線程”或操作系統中可以運行一系列步驟的一種機制
實際上從總體結構上看, SQLServer2005 也是基於實例和關系數據庫的集合,即通過每一個實例來管理若干數據庫( Oracle 和 SQL Server 的數據庫是概念不同的,從 Oracle 角度而言, SQL Server 的數據庫概念比較怪異,理論上應該與 Oracle 的邏輯概念表空間是等效的),這些數據庫總的來說都是為了滿足某個應用需要和業務邏輯而組合起來的一個完整的應用,而每個數據庫又是一個相對獨立的業務邏輯單位,但他們是為了實現一個共同的目標,因此也不大適合進行分割成若干實例。
SQL Server2005 的引擎組件更注重的是數據庫處理過程中的依次順序,實際上從實例角度而言,兩者可以說是類似的,比如都具備數據緩沖區、字典緩沖區、日志緩沖區、各種數據庫進程或線程(數據庫讀寫進程、日志讀寫進程、檢查點)
-