该堆栈的顶部是 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 (连接时无法指定处理器隶属关系),或在他的连接上重新分配工作负荷,以便每个连接的工作负荷更加均衡。当然,后一种情况要远好于前一种情况。
本新闻共2
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




