SQL Server 连接基础知识
的存储过程。
为何要关心将请求作为语言事件还是作为 RPC 提交给服务器呢?通常,这是因为 RPC 的功能更为出色,特别是在重复调用具有不同筛选值的同一查询时。尽管 SQL Server 可以自动将普通的语言事件请求参数化,但这种能力非常有限。它从不尝试自动将某些类型的查询参数化。这可能会导致基本相同的查询产生不同的执行,从而只因为这些不同的执行提供不同的值,而导致在服务器上白白浪费计划编译的成本。这通常不是您所希望的结果 - 您希望针对查询的第一次执行编译一个新的计划,然后将该计划重复用于具有不同参数的执行。 而 RPC 则通过显式参数化查询(而不是依赖服务器参数化查询)来支持计划重复使用。为过程的第一次执行生成一个计划后,随后的执行将自动重复使用该计划,即使它们提供的参数值不同。与通过语言事件调用存储过程相比,使用 RPC 调用存储过程不仅节省了计划编译所需的执行时间和 CPU 资源,还增强了 SQL Server 内存资源的利用率,因为它避免了冗余执行计划所浪费的内存。 在执行动态 T-SQL 时,通常首选 sp_executesql 而不是 EXEC() 也出于同样的原因。Sp_executesql 的工作方式是:使用指定的查询创建一个存储过程,然后使用提供的参数调用它。与 EXEC() 不同,sp_executesql 提供了一个允许您参数化动态 T-SQL 并支持计划重复使用的机制。使用 sp_executesql 执行的动态查询比使用 EXEC() 的查询能够在更大程度上避免不必要的编译和资源消耗。 TDS 从客户端发送到 SQL Server 的 RPC、语言事件和其他类型的请求被格式化为称作表格数据流 (TDS) 的 SQL Server 特定数据格式。TDS 是 SQL Server 客户端和服务器之间使用的“语言”。对于它的确切格式将不作介绍,但是,如果客户端要与 SQL Server 进行通信,就必须使用 TDS。 目前,SQL Server 支持三种版本的 TDS:TDS 8.0(适用于 SQL 2000 客户端)、TDS 7.0(适用于 SQL Server 7.0 客户端)和 TDS 4.2(适用于 SQL Server 4.2、6.0 和 6.5 客户端)。完全支持所有 SQL Server 2000 功能的版本只有 TDS 8.0。其他版本保持向后兼容。 服务器端 Net-Library 在服务器端,客户端请求最初由 SQL Server 为侦听特定网络协议而建立的侦听器接收。这些侦听器由服务器上的网络库以及服务器端的 Net-Library(在它们与服务器之间提供管道)构成。您可以使用 SQL Server 网络实用程序配置服务器侦听的协议。SQL Server 与客户端支持同样范围的网络协议(处理群集的情况除外)。对于群集化的 SQL Server,只有 TCP/IP 和命名管道可用。 SQL Server 为侦听客户端请求所使用的每个网络协议设置一个线程,并使用 Windows 的 I/O 完成端口机制等待和有效处理请求。从网络接收到 TDS 数据包时,Net-Library 侦听器将其重新汇编为它们的原始客户端请求,并将这些请求传递到 SQL Server 的命令处理层,即开放式数据服务 (ODS)。 将结果返回到客户端 服务器在准备将特定客户端请求的结果返回时,将使用最初接收请求时所用的网络堆栈。它通过服务器端 Net-Library 将结果发送到相应的网络协议,随后这些结果将通过网络以 TDS 格式返回到客户端。 在客户端上,客户端 Net-Library 将从服务器接收的 TDS 数据包从 IPC 层重新汇编,并将其继续转发到初始化该请求的 API 或对象库。 小结 尽管涉及了所有组件,但 SQL Server 客户端与服务器之间的往返过程却相当快 - 特别是在使用内存 Net-Library 时,亚秒响应时间非常普遍。构建和调整您自己的 SQL Server 客户端应用程序时,以下几个与数据相关的问题值得注意: • 如果应用程序与 SQ |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |