【发布时间】:2012-04-04 06:45:58
【问题描述】:
我们有一个“服务器”,在机器 A 上配置了 SQL Server 2008 R2。在同一个 LAN 中,我们有机器 B,它是一台硬件相同但没有安装 SQL Server 的机器。
我们有一组单元测试,它们从数据库中请求一些记录并将它们映射到正确的 CLR 对象。当这个单元测试从机器 A 和 SQL Server 运行时,测试在 5 毫秒内运行。
如果我将测试代码复制到机器 b 并运行它,测试总共需要大约 50 毫秒,如果这只是由网络开销引起的,那么这将是一个显着增加。
执行的查询不会发送大量数据(列中没有 blobs/xml 数据),总数据约为几 KB。使用IDataReader 读取数据。我们使用一个打开一次的连接,用于向数据库发起大约 24 个查询。
我可以尝试任何提示/技巧来测试是否真的是网络开销减慢了执行速度?我感觉有些东西在 SQL Server 中没有正确配置。
【问题讨论】:
-
我不确定您在这里期望什么答案:您通过网络执行的任何操作都会比在本地执行的操作慢得多,因此这本身并不令人惊讶。令人惊讶的是,您试图在单元测试执行中节省 45 毫秒。如果您可以解释为什么需要这样做,那么有人可能会提出建议。您可能还想尝试 dba 或 serverfault 站点,因为这似乎不是编程问题。
-
@Pondlife,感谢您的帮助。我确信网络开销可能是问题所在,但我想知道我是否没有遗漏一些东西和/或是否有办法可以分析这样的事情。将其移至 serverfault/dba 可能是个好主意,但我不知道该怎么做。
-
您实际上并没有弄清楚“问题”是什么,因为大多数人不会抱怨他们的单元测试需要 45 毫秒才能执行 :)
-
问题是本地 sql server 在 5ms 内运行测试和远程 sql server 运行时间大约是 10 倍之间的差异。
-
恐怕我仍然没有看到问题:很明显,任何操作通过网络执行的时间都比本地操作要长。到目前为止,您还没有证明它需要 10 倍的时间,只是它需要额外的 45 毫秒。远程1s手术需要多长时间? 1.045 秒还是 10 秒?我不想听起来不屑一顾,但重要的是事情要尽可能快地发生,而不是尽可能快,这意味着调查这几乎肯定不值得你花时间。当然,除非你的动机是单纯的好奇心。无论哪种方式,serverfault 可能是更好的地方。
标签: sql-server performance sql-server-2008 networking