摘要:本文介紹了在客戶機上處理 Microsoft SQL Server 查詢的方式,各種客戶機與 SQL Server 的互動方式,以及 SQL Server 在處理客戶機程式的請求時需要完成的工作。
簡介
Microsoft(R) SQL Server(TM) 內部機制和結構是一個非常大的主題,因此本文僅限於程式開發人員感興趣的問題,集中研究其他源中沒有徹底討論的問題。在討論 SQL Server 的結構時,我們主要觀察客戶機的處理過程,研究不同的客戶機程式與 SQL Server 的互動方式,以及 SQL Server 如何處理客戶機的請求。還有一些討論 SQL Server 其他方面的資訊源,特別是 Microsoft Press 出版的 Inside SQL Server 7.0,作者是 Ron Soukup 和 Kalen Delaney,這本書非常詳細地討論了 SQL Server 儲存引擎的內部機制和處理方法,不過對查詢處理器的討論不夠深入。本文正填補了這個空白。
我們期望本文有助於讀者編寫出更好的應用程式。通過本文,讀者會在提高程式效能方面得到新的啟發,產生新的理解。
SQL Server 是一種客戶機/伺服器系統
多年來,SQL Server 一直被認為是一種客戶機/伺服器系統。事實上,Sybase DataServer(以此為基礎開發了原始的 SQL Server)正是第一個作為客戶機/伺服器系統開發的商用關聯式資料庫系統。那這又說明了什麼呢?這不只意味著 SQL Server 是一個雙層系統。從傳統上看,雙層系統意味著客戶機應用程式運行在一台機器上,向另一台電腦上的伺服器發送請求。而對於 SQL Server,客戶機/伺服器意味著 SQL Server 的組成部分,即客戶機 API 部分,駐留在處理結構中的遠端,與伺服器組件本身是分開的。
在典型的雙層模型中,客戶機程式部分駐留在台式機上,具有大量客戶機應用程式邏輯和商務邏輯,並且會直接向資料庫系統發出請求。然後,客戶機得到伺服器響應這些請求所返回的資料。
三層系統也採用了同樣的模型。多年以來,SQL Server 一直用在交易處理監視系統中,例如 BEA 的 Tuxedo 以及 Compaq 的 ACMSxp,這些系統早在二、三十年前就採用了典型的三層模型。三層模型在今Apsara Infrastructure Management Framework於 Web 的應用系統中佔據了支配地位,這類系統以 Microsoft 的 MTS 以及新的 COM+ 1.0 為代表。從 SQL Server 的角度看,三層解決方案中的客戶機程式是放在中介層的。中介層直接與資料庫互動。實際的案頭,或瘦客戶機(Thin Client),使用其他機制並通常直接與中介層互動,而不是直接與資料庫系統互動。圖 1 描述了這種結構。
圖 1. 三層系統模型
客戶機結構
從結構的角度看,SQL Server 關係伺服器組件本身並不真正關心客戶機程式啟動並執行位置。事實上,就 SQL Server 而言,即使在運行 SQL Server 的同一台機器上運行應用程式,仍然還是客戶機/伺服器模型。伺服器運行一個單獨的多線程進程,為來自客戶機的請求提供服務,不管客戶機的位置在哪裡。客戶機程式碼本身是單獨的運行在客戶機應用程式內部的 DLL,與 SQL Server 的實際介面是在客戶機和伺服器之間對話的“表格式資料流”(Tabular Data Stream, TDS) 協議。
一個常見的問題是“什麼是 SQL Server 的本機介面呢?”很長時間以來,很多開發人員一直都不願意使用 ODBC 這樣的介面,因為他們認為由 Sybase 開發的客戶機 API,也就是 DB-Library,是 SQL Server 的本機介面。實際上,SQL Server 關係伺服器本身並沒有本機 API,它的介面就是在客戶機和伺服器之間的通訊流協議 TDS。TDS 把客戶機發送給伺服器的 SQL 陳述式封裝起來,也把伺服器返回給客戶機的處理結果封裝起來。任何直接處理 TDS 的 API 都是 SQL Server 的本機介面。