【问题标题】:how can I simulate network latency on my developer machine?如何在我的开发人员机器上模拟网络延迟?
【发布时间】:2011-05-09 14:00:20
【问题描述】:

我正在将 MS Access 2003 应用升级到 SQL Server 后端。在我的开发机器上,SQL Server 是本地的,所以性能相当不错。我想使用远程 SQL Server 测试性能,以便在重新设计应用程序时考虑网络延迟的影响。我预计一些现在看起来很快的查询在部署到生产环境后会运行得很慢。

如何在不使用虚拟机或将 SQL 重新定位到另一台计算机的情况下减慢(或模拟远程)SQL Server 的速度?是否有某种代理或 Windows 实用程序可以为我执行此操作?

【问题讨论】:

  • 只需编写您的应用程序以高效地进行数据检索,即永远不要检索超过用户需要或一次可以使用的内容。这在任何环境中都是有效的,包括使用 Jet/ACE 后端。它没有什么神奇之处。您可能会遇到边缘情况的唯一情况是,如果您计划在开放的 Internet 上运行,那里的带宽相对非常低(与 LAN 相比)。在这种情况下,您可能会做得更多,但我建议不要过早优化 - 使其高效,然后解决不够快的问题。
  • @David:我正在移植一个非常大的现有 MS ACcess 应用程序。我需要对所做的更改保持战略性,没有时间或预算来修改每个查询和数据源。
  • 我什至没有开始建议修改所有内容。如果它是一个设计良好的 Access 应用程序,它的性能可能会非常好。如果不是,那将需要大量工作。无论后端是 Jet/ACE 还是服务器数据库,仅检索有限数量的记录的原则使得应用程序快速、高效。
  • 我对现有应用程序的经验是,瓶颈几乎无法预测。每次我升迁时,我认为每个应用程序的许多区域都存在需要通过移动逻辑服务器端来处理的问题,还有一些我认为可以正常执行的其他区域,因为原创设计。但大约 50% 的时间,瓶颈表现良好,没有问题的区域成为瓶颈。如果不进行升级和测试,根本就没有办法知道。使用与工作站分开的服务器来进行操作就足以揭示这些。

标签: sql-server performance ms-access proxy latency


【解决方案1】:

@RedFilter:您应该指出您使用的是哪个版本的 Access。这份 2006 年的文档显示,Access 通过网络向客户端传递的内容比查询是否包含“Access-specific keywords”更为复杂。

http://msdn.microsoft.com/en-us/library/bb188204(SQL.90).aspx

但是,对于每个较新版本,Access 在使用服务器资源方面可能会变得越来越复杂。

我会坚持我的简单建议:如果您想最小化带宽消耗,同时仍然使用 Access 作为 GUI,直通查询做得最好,因为那么将由您而不是 Access 来控制通过网络传输的数据量。

我仍然认为您最初的问题/方法是错误的:如果您的 Access MDB 文件首先位于 LAN 上(是吗?)您不需要模拟网络延迟的影响。您需要嗅探 Access 生成的 SQL 语句,而不是引入一些任意且恒定的“网络延迟”因素。要将使用位于 LAN 服务器上的 MDB 的 Access GUI 与针对 SQL Server 后端的大型 Access GUI 进行比较,您需要评估 Access 通过线路从后端服务器传送到客户端的数据。除非您使用直通查询,否则即使是“升级的”访问也可能会占用带宽低谷。但是,为 SQL-Server 后端编写正确的客户端在网络带宽方面总是比 Access 对位于 LAN 服务器上的 MDB 的节俭得多,其他条件

【讨论】:

  • 当前访问后端MDB在局域网上。我目前正在嗅探查询。 Access的版本是2003。y的理解是直通查询是只读的,另外我的一些查询需要输入参数。我认为确定应该解决哪些瓶颈的最快方法是凭经验进行。
【解决方案2】:

有一个适用于 Windows 的软件应用程序可以做到这一点(必要时模拟低带宽、延迟和损失)。虽然它不是免费的。试用版有 30 秒的仿真限制。这是该产品的主页:http://softperfect.com/products/connectionemulator/

【讨论】:

    【解决方案3】:

    您的操作可能存在误解。 MS-Access 支持所谓的“异构连接”(即来自各种后端的表可能包含在同一个查询中,例如组合来自 Oracle 和 SQLServer 以及 Access 和 Excel 电子表格的数据)。为支持此功能,Access 在客户端应用 WHERE 子句过滤器,除非存在针对智能后端的“直通”查询。在 SQL Server 中,过滤发生在服务器上运行的引擎中,因此 SQL Server 通常会向客户端发送小得多的数据集。

    您的问题的答案还取决于您所说的“远程”是什么意思。如果您让 Access 和 SQL Server 在同一网络上相互竞争,如果 Access MDB 文件驻留在文件上,则在服务器上运行的 SQL Server 将只消耗 Access 的一小部分带宽服务器。 (当然,如果 MDB 驻留在本地 PC 上,则不会消耗网络带宽。)如果您将 LAN 上的 Access 与通过云的宽带上的 SQL Server 进行比较,那么您将标称的 100 mbit/sec 管道与DSL 或电缆带宽,即高速电缆的标称值可能为 20 mbit/sec,最多为带宽的五分之一,可能要少得多。

    因此,您必须更具体地了解要比较的内容。

    您是否将本地 PC 上的 Access 客户端使用驻留在文件服务器上的 Access MDB 与其他类型的客户端使用来自同一网络上另一台服务器上的 SQL Server 的数据进行比较?是否要继续使用 Access 作为客户端?您的查询会被传递吗?

    【讨论】:

    • @Time:您的第一段不正确。在没有使用特定于 Access 的关键字的情况下,我对 SQL Server 的非直通查询的 WHERE 子句正在 SQL Server 上运行。您的第二段也不正确:对于从 Access 对 SQL Server 运行的查询,仅在 JOINWHERE 子句可以在 SQL Server 上运行的情况下消耗更少的带宽,因为没有 Access=specific 关键字,像“IIF”。如果有特定于 Access 的关键字,则将整个数据集拉到 Access 中,以便在那里运行关键字。
    • 是否拉下完整数据集取决于使用 Access 特定功能的位置。在 SELECT 子句中,这不是什么大问题,因为所有 WHERE 条件和 JOIN 都将在服务器上执行,然后 SELECT 中处理的函数仅在过滤的结果集上执行。但是,如果您在 WHERE 或 JOIN 子句或 ORDER BY 中使用特定于 Access 的函数,您可能会或可能不会拉下整个表——取决于 Jet/ACE 是否可以想办法在 Access 之前找出某些限制因素- 特定功能。
    【解决方案4】:

    我自己没有使用过,但这里有另一个 SO 问题:

    在其中一个 cmets 中明确提到了 SQL Server。

    【讨论】:

      猜你喜欢
      • 2014-01-04
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多