INF: 客户端上 SQL Server 吞吐量的效果

文章翻译 文章翻译
文章编号: 180775 - 查看本文应用于的产品
本文已归档。它按“原样”提供,并且不再更新。
展开全部 | 关闭全部

本文内容

概要

在评估影响性能的一般区域,最通常认为方面是处理器速度、 磁盘 I/O 和服务器上的内存。 尽管这些部分的服务器的性能是正确的性能具有重要意义,但您还必须考虑网络滞后和客户端处理时间为还可以对系统的总体性能有重大影响的因素。

本文讨论在后一种区域,并提供的指南评估它们可能会对服务器产生的影响。

更多信息

下面的示例将用整篇文档。这两个连接的步骤执行只是一个小的差别在 TRANSACT-SQL 语法中具有相同的更新。

连接 1

use pubs
go
select convert(char(30), GetDate(), 9) "Start Time"
go

            Begin transaction

   Go   ==>   Send to SQL Server and process results

            Update authors set au_lname = au_lname

   Go   ==>   Send to SQL Server and process results

Commit / Rollback transaction

   Go   ==>   Send to SQL Server and process results

select convert(char(30), GetDate(), 9) "End Time"
go
				

连接 2

use pubs
go
select convert(char(30), GetDate(), 9) "Start Time"
go
begin transaction
if(0 = @@ERROR)
begin
   update authors set au_lname = au_lname
   if(0 = @@ERROR)
   begin
      commit transaction
   end
   else
   begin
      rollback transaction
   end
end
go    ==>   Send to SQL Server and process results
select convert(char(30), GetDate(), 9) "End Time"
go
				

网络往返旅程

连接 1 需要三个行程 SQL Server 计算机:
  • 开始事务
  • 更新
  • 提交 / 回滚事务
连接 2 需要以完成更新的单个往返行程。

查询取消

DB 库和 ODBC api 支持异步查询处理。例如对于 db-library 使用 dbdataready 函数允许客户端轮询查询的完成状态。

DB 库中 dbdataready 函数是由 DataReadySleep 值来控制的。有关 DataReadySleep 注册表项的其他信息,请参阅 Microsoft 知识库中下面的文章:
159234: INF: 如何更改使用的 Dbdataready 睡眠值

休眠时间如何影响该计时

默认状态下,睡眠值是 250 毫秒。

连接 1 在 SQL Server 使三个圆形的行程。默认状态下,客户端遇到至少 750 毫秒的等待时间的不实际的网络传输的计算时间。等待时间将计算从 (250 毫秒 * 3) = 750 毫秒为单位)。

连接 2 单个行程,如果遇到 250 毫秒,不计算的实际网络传输时间的等待时间的最小。

您可以更改为原来的三个本示例的速度,只需通过利用 TRANSACT-SQL 语法和删除两个网络之间的往返行程。

网络往返如何影响其他用户

连接 1 包含一个事务打开为 500 毫秒的最小。 交易记录打开后它将 500 毫秒完成了更新,然后提交或回滚该事务。数据库并发防止其他用户访问您正在修改的记录。

连接 2 保持事务处于打开状态的时间仅根据需要完成该操作。133-mhz 奔腾单处理器计算机上运行 SQL Server 和 ISQL/w,看到下面的排练时间。

注: 在两个以下的示例中未显示的最后一个网络 I/O。提交或回滚已完成后,将释放该锁,但不记录在最终的 I/O。
   Begin transaction                5 milliseconds
   Update                          20 milliseconds
   Commit/Rollback transaction      7 milliseconds
      TOTAL                        32 milliseconds
				

连接 2 将完成大约 32 的毫秒,而连接 1 需要大得多的处理窗口和极大地扩展了事务延迟时间。
   Begin transaction                5 milliseconds
   Network I/O                    250 milliseconds
   Update                          20 milliseconds
   Network I/O                    250 milliseconds
   Commit/Rollback transaction      7 milliseconds
      TOTAL                       532 milliseconds
				

如前面显示网络时间是一个简单的三个因素。但是,锁定影响对其他数据库用户的示例是 16 的一个因素 (532/32 = ~ 16)。

现在让我们假设这个简单的示例是从使用 28.8 调制解调器连接的远程便携式计算机。除了 250 毫秒延迟强加 dbdatareadysleep 参数,是 appreciable 实际通过慢速链接传输信息的时间。连接 1 由一个更大的因素会影响其他的数据库用户,而连接 2 将主要受影响的客户端计算机的速度。 该命令在 32 以毫秒为单位) SQL Server 处理一次,发送。 唯一的用户体验降低系统的是远程用户是按预期方式由于到较慢的调制解调器。

客户端延迟时间

客户端延隔时间是时间的在客户端处理它接收到结果时所经历段。如果您再次看一下连接 1,您可以快速查看这可以影响该过程。如果处理一个结果集客户机都需要一个额外的 10 毫秒,您可以将另一个 30 毫秒为单位) 添加到整个事务时间和另一个事务延迟时间以 20 毫秒为单位)。

让我们再次切换示例。在这种情况下是库存表从一个联机的系统。您已经花了开发和安装什么应该最快的联机订单处理系统历史记录中的月数。用户可以搜索、 购买,并保持其他选项中的购物车。这是 tbllnventory 表:
   tblInventory
      iProductID       int
      strTitle         varchar(50)
      strDescription   varchar(255)
      iSize            int
      iInStock         int
      iOnOrder         int
      iType            int
				

我想要购买一些 cereal。但是,我想要查看可用的内容。我们可以定义 cereal 如键入 2,,以便在应用程序发出以下查询。在此的示例数据库包含 750 cereal 相关的项目。
   Select strTitle, strDescription, iSize, iInStock from tblInventory
   where iType = 2
				

SQL Server 将编译和分析查询,然后开始,则返回结果。共享的锁会获取相应的页上。请记住,共享锁块更新、 插入和删除操作。

一次由于您的应用程序使用全国,六个其他人正在尝试 cereal 订单。

SQL Server 填充第一个表格数据流 (TDS) 数据包、 将其发送到客户端,然后等待客户端处理结果。将时间内客户端处理结果 (客户端延迟时间) SQL Server 继续保存在页上共享的页锁是它已处理。此共享的锁可以阻止试图完成的订单的用户。

它看上去像一个简单的操作。从该 SQL Server 选择一个结果集并将值插入列表框。133-mhz 奔腾计算机可以将 750 项目添加到列表框中,只是超过一秒内。同时归档它禁用列表框将仅三分之一的第二个。通过简单地禁用列表框中,您可以显著减少客户端延迟时间。

您甚至可能会更改选择的操作,以进一步减少了锁定倾斜。通过将查询更改为以下限制共享的锁暴露。
   Insert * into #tblSelect from
   Select strTitle, strDescription, iSize, iInStock from tblInventory
				

   Select * from #tblSelect
				

查询在 SQL Server 上隔离,并且打不开返回结果,直到它们已被移动到临时表,从库存表,将释放所有共享的锁。这就限制了所需 SQL Server 移到 tempdb 的结果的时间到在库存表上保持共享的锁的时间。该控件是再次使用数据库并不是客户端。

完成类似现象的另一种方法是使"智能"客户端。 而不是填充列表框,它可能更快地加载一个数组。但是,您仍有顾虑被绑定的网络吞吐量。临时表是在这些情况下更好的解决方案。

可以看到客户端可以播放数据库吞吐量的关键卷。您应特别小心,当使用远程和报告系统。客户端所需锁的同时处理结果的时间量有可能影响数据库吞吐量。这些类型的问题可能难以延迟期间可能会 100 毫秒为单位的排练时间,请参阅且难以使用 sp_who 存储过程,请参阅。使用较慢的链接可以快速查看行为。从 RAS 的链接运行该应用程序并查看总体行为就像。您还可以利用完全的 SQL 跟踪实用程序仔细分析应用程序。

有关更多的信息,请参阅下面 Microsoft 知识库中相应的文章:
165951: INF: 对于 SQL Server 处理的结果

172117: INF: 如何在存储的过程和触发器中的配置文件进行交易的 SQL 代码

162361: INF: 了解和解决阻止问题的 SQL Server

167610: INF: 评估查询性能下降

48712: INF: 处理 db-library 中正确的超时

117143: INF: 何时和如何使用 dbcancel() 或 sqlcancel()

属性

文章编号: 180775 - 最后修改: 2013年10月7日 - 修订: 3.0
这篇文章中的信息适用于:
  • Microsoft SQL Server 6.5 标准版
关键字:?
kbnosurvey kbarchive kbmt kbinfo KB180775 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 180775
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com