程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 連接體系結構的客戶端(1)

SQL Server 連接體系結構的客戶端(1)

編輯:關於SqlServer


    引言
  該堆棧的頂部是 API 或對象庫層。應用程序通過對象庫公開的 API 函數或接口連接到 Microsoft® SQL Server。用於訪問 SQL Server 的 API 示例包括 ODBC 和 DB-Library。用於訪問 SQL Server 的對象庫示例包括 OLE DB、ADO 和 ADO.NET。由於 ADO 最終使用 OLE DB 與服務器通信,因此 Windows 應用程序在與 SQL Server 通信時實際上只使用兩個常用的對象庫,即 OLE DB 和 ADO.NET。由於通過 ADO 或 ADO.NET 進行連接通常比通過 ODBC 進行連接更普遍(但 SQL Server 的查詢分析器和企業管理器仍通過 ODBC 進行連接),因此本文將從 ADO/OLE DB 和 ADO.Net 的角度介紹 SQL Server 連接體系結構的客戶端。如今,大多數應用程序均通過對象庫(而非 ODBC 或類似 API)連接到 SQL Server。

ADO 和 OLE DB
  OLE DB 客戶端(也稱作使用者)通過客戶端提供程序與服務器以及其他後端程序進行通信。此提供程序是一組 COM 組件(一個或多個),用於將應用程序請求轉換為網絡進程間通信 (IPC) 請求。在使用 SQL Server 的情況下,最常用的 OLE DB 提供程序是 SQLOLEDB,它是 Microsoft 為 SQL Server 提供的 OLE DB 提供程序。SQLOLEDB 隨附於 SQL Server 中,並作為 Microsoft 數據訪問組件 (MDAC) 庫的一部分安裝。

  為了使用 ADO 與 SQL Server 進行通信,應用程序首先使用 Connection 對象建立與服務器的連接。ADO 的 Connection 對象接受一個連接字符串,該字符串指定要使用的 OLE DB 提供程序以及傳遞給它的參數。如果應用程序使用 SQLOLEDB 提供程序連接到 SQL Server,則該字符串中將顯示“SQLOLEDB”。

  ADO 應用程序還可以通過 ODBC 連接到 SQL Server。為此,應用程序將使用適用於 ODBC 的 OLE DB 提供程序,並指定在其連接字符串中引用目標 SQL Server 的 ODBC 數據源。這種情況下,應用程序與 OLE DB 進行通信,同時 ODBC 的 OLE DB 提供程序調用相應的 ODBC API,以便與 SQL Server 進行會話。

ADO.Net
  ADO.NET 應用程序通常使用 .NET Framework Data Provider for SQL Server 連接到 SQL Server。該本機提供程序使 ADO.Net 對象能夠與 SQL Server 直接進行通信。通常,應用程序使用 SqlConnection 對象建立連接,然後使用 SqlCommand 對象向服務器發送命令,並接收服務器返回的結果。SqlDataAdapter 和 SqlDataReader 類通常與 SqlCommand 一起使用,以便通過托管的代碼應用程序與 SQL Server 進行交互。

  通過 OleDbConnection 類,ADO.Net 應用程序還可以使用 SQLOLEDB OLE DB 提供程序與 SQL Server 進行交互。此外,它們可以通過 OdbcConnection 類使用 ODBC 訪問 SQL Server。因此,僅通過托管代碼,您就有三種不同的方法從應用程序訪問 SQL Server。從故障排除的角度而言,了解這些方法是非常有用的,因為它可以幫助您將遇到的與連接相關的問題歸結到特定的數據訪問層或庫。

客戶端 Net-Library
  該堆棧中的下一層是 Net-Library。Net-Library 在 API 或對象庫(應用程序使用它與 SQL Server 進行通信)與網絡協議(用於與網絡交換數據)之間提供了一個通道。SQL Server 為所有主要的網絡協議提供了 Net-Library。這些庫以透明方式將客戶端發出的請求發送到 SQL Server,並將服務器發出的響應返回給客戶端。可以使用 SQL Server 的客戶端網絡實用程序配置適用於特定客戶端的 Net-Library。支持的客戶端協議包括 TCP/IP、命名管道、NWLink、多協議 (RPC) 和其他一些協議。

  尤其值得一提的 Net-Library 是共享內存 Net-Library。顧名思義,該 Net-Library 使用 Windows 的共享內存功能在 SQL Server 客戶端與服務器之間進行通信。顯然,這意味著客戶端與服務器必須位於同一台物理計算機上。

  由於它能夠繞過物理網絡堆棧,因此共享內存 Net-Library 要比其他 Net-Library 快得多。對共享內存區域的訪問受到同步對象的保護,因此客戶端與服務器之間的通信速度主要受限於 Windows 對內核對象進行調度的能力,以及進程與共享內存區域之間進行數據復制的能力。

  可以在連接時將某個時間段或(本地)指定為您的計算機名,來指示使用共享內存 Net-Library。也可以在連接時為計算機\實例名加上前綴 lpc:,來指示要使用共享內存 Net-Library。

  注意,即使連接到同一台計算機上的 SQL Server,共享內存 Net-Library 也未必就是最佳的連接選項。在某些情況下,客戶端與服務器之間的直接連接可能限制它的擴展性。與應用程序整體體系結構中的其他元素一樣,應始終對給定技術解決方案進行全面的測試,然後才能判斷它是否有良好的擴展性以及是否比其他方法更快。

連接
  客戶端進行連接時,SQL Server 的用戶模式計劃程序 (UMS) 組件將它指定給特定的計劃程序。啟動時,SQL Server 為系統上的每個 CPU 創建一個單獨的 UMS 計劃程序。當客戶端連接到服務器時,這些客戶端將指定給具有最少連接數的計劃程序。連接後,客戶端將不會更換計劃程序 - 它將始終受到指定計劃程序的控制,直到連接斷開。

  這對與服務器建立多個連接的應用程序很重要。如果應用程序性能較差,或無法在它的多個連接上平均分配工作,則在該應用程序的某些連接之間可能造成不必要的 CPU 資源爭用,而其他連接實際上卻處於空閒狀態。

  例如,應用程序與雙處理器計算機上運行的 SQL Server 建立了四個連接,連接 1 和 3 隸屬於處理器 0,連接 2 和 4 隸屬於處理器 1。如果應用程序的大部分工作通過連接 1 和 3 執行,則這兩個連接將爭用 CPU 0,而 CPU 1 實際上可能仍處於空閒狀態。這種情況下,應用程序只能斷開某些連接或重新連接某些連接,並希望連接 1 和 3 隸屬於不同的 CPU (連接時無法指定處理器隸屬關系),或在它的連接上重新分配工作負荷,以便每個連接的工作負荷更加均衡。當然,後一種情況要遠好於前一種情況。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved