SQL Server 包含四大核心元件:協定層、關聯式引擎(又稱查詢處理器)、儲存引擎 與 SQLOS。任何用戶端應用程式提交給 SQL Server 執行的批次都必須與這四個元件互動。
負責接收請求並轉換為關聯式引擎可識別的形式;同時取得查詢結果、狀態資訊、錯誤資訊,轉換為用戶端可理解的格式後傳回。
負責接收 SQL 批次並決定處理方式。對 T-SQL 查詢與程式結構,可解析、編譯、最佳化請求並檢查執行過程。若執行時需要資料,會送出資料請求給儲存引擎。
管理所有資料存取,包含交易式命令與大量作業(備份、大量插入、DBCC 命令等)。
處理通常視為作業系統職責的活動:執行緒管理(排程)、同步基元、死結偵測、記憶體管理(含緩衝集區)。
SQL Server 2005 引入動態管理檢視(DMV)與動態管理函數(DMF),讓開發人員與 DBA 能觀測以前無法看到的內部資訊。這些中繼資料存在於 sys 結構描述中,名稱皆以 dm_ 開頭。常用類別:
dm_exec_*:使用者程式碼執行與資料庫連線相關資訊dm_os_*:儲存、鎖定、排程等系統底層資訊dm_tran_*:目前交易的詳細資訊dm_io_*:網路與磁碟 I/O 活動追蹤dm_db_*:資料庫與資料庫物件(如索引)詳細資訊應用程式與 SQL Server 溝通時,協定層使用微軟定義的表格式資料流(TDS)封包規範通訊格式。伺服器端與用戶端皆有網路程式庫將 TDS 封包封裝為標準通訊協定(TCP/IP、命名管道等)封包。可用協定:
處理傳送給 SQL Server 的 T-SQL 語言事件,檢查語法正確性並轉譯為可執行的內部格式(查詢樹)。
從命令剖析器取得查詢樹並準備實際執行。不可最佳化的陳述式(控制流程、DDL 命令)編譯為內部格式;可最佳化的陳述式(DML:SELECT、INSERT、UPDATE、DELETE)標記後傳送給最佳化器。最佳化器編譯整個批次、最佳化查詢並檢查安全性,產出執行計畫。
管理預存程序與執行計畫相關事務,判斷何時需重新編譯、管理預存程序緩衝區以供重用、負責查詢自動參數化。
管理查詢編譯與最佳化所需的中繼資料存取。中繼資料儲存於儲存引擎管理的資料中,但某些元素(資料行資料類型、資料表可用索引)必須在查詢執行前即可存取。
執行查詢最佳化器產生的執行計畫,如調度員逐步執行計畫中每個命令。大多數命令需與儲存引擎互動以修改或取回資料、管理交易與鎖定。
當 SQL Server 需定位資料時呼叫存取方法程式碼,建立與請求掃描資料頁與索引頁,準備 OLE DB 資料列集回傳給關聯式引擎。存取方法不直接取回資料頁,而是向緩衝區管理器發出請求。
核心特性:保證交易原子性(全做或全不做)、持久性(提交後即使系統故障也能復原)。交易具備 ACID 四屬性:原子性、一致性、隔離性、持久性。
SQL Server 2005 將所有需存取作業系統的服務歸納為單一功能單元 SQLOS,如同 SQL Server 內部的作業系統。提供記憶體管理、工作排程、I/O 管理、鎖與交易管理框架、死結偵測、副本製作、例外處理等通用功能。
排程器可視為背景工作使用的邏輯 CPU。背景工作可為執行緒或綁定到邏輯排程器的纖程。若設定親和性遮罩,每個排程器對應特定 CPU。每個排程器依需求建立與銷毀背景工作。背景工作空閒超過 15 分鐘或記憶體緊張時可能被銷毀。
SQL Server 2005 每個 CPU 啟動時建立一個排程器執行緒。排程器狀態為線上或離線,取決於親和性遮罩設定。可動態控制處理器親和性:改變遮罩納入額外 CPU 時,新 CPU 上線,排程器監視器偵測負載不平衡並遷移背景工作;使 CPU 離線時,該排程器完成現有工作後停止。
主要 DMV:sys.dm_os_schedulers、sys.dm_os_workers、sys.dm_os_tasks、sys.dm_os_waiting_tasks。需具備「檢視伺服器狀態」權限。
SQL Server 主要記憶體元件為緩衝集區。未被其他元件使用的記憶體保留於緩衝集區,作為從磁碟讀取資料庫頁面的資料快取。緩衝管理器管理磁碟 I/O,將資料頁與索引頁置於快取供多用戶共享。緩衝區即記憶體中的一個資料頁(8 KB),可視為容納資料庫頁面的頁框架。
快取中的資料經雜湊處理以支援高速存取。雜湊表為記憶體結構,包含指向緩衝區頁面的指標鏈結清單。
SQL Server 維護自由頁面位址的鏈結清單,需緩衝區頁的工作執行緒可使用清單指向的第一個頁面。有機制負責將髒頁寫入磁碟、將久未引用頁面標記為自由頁面。
檢查點程序週期性掃描快取並將特定資料庫的髒頁寫入磁碟,目的在將髒頁數量保持最小,縮短故障後復原時間。觸發情況:資料庫擁有者明確發出指令、記錄快滿達 70%(簡單復原模式)、預估復原時間過長、SQL Server 正常關閉。
SQL Server 記憶體由三部分組成:緩衝集區(最大、最常用)、大於 8 KB 的大記憶體區塊(單獨管理)、AWE 記憶體(僅資料快取頁面可用,需單獨追蹤)。可透過 sys.dm_os_memory_clerks 查詢非緩衝集區記憶體使用量。
啟動時計算虛擬位址空間(VAS)大小。32 位元系統預設 2 GB(可透過 /3GB 開關擴至 3 GB),超過 3 GB 需啟用 AWE。SQL Server 2005 幾乎完全動態管理記憶體。預讀機制可預期資料與索引頁面需求,在實際需要前讀入緩衝集區,完全由系統內部管理。