【发布时间】:2010-07-01 22:15:43
【问题描述】:
我们的 Web 应用程序在高峰时段遇到性能问题,目前该应用程序分为一台 2003 IIS6 Web 服务器和一台 SQL Server 2005 DB 服务器。 DB 服务器上的查询时间看起来不错(大约 30 毫秒),CPU 较低(低于 20%),但在 Web 服务器上执行查询可能需要很长时间(超过 1 秒)。
我在 perfmon 中寻找线索,发现平均网络 IO 等待时间约为 400 毫秒,这可以很好地解释性能差异。我还在 SSMS 中运行了一些查询,发现每秒大约有 10,000 毫秒的累积 ASYNC_NETWORK_IO 等待类型。
根据一些研究,问题似乎是网络容量不足,或者网络服务器处理结果的速度不够快。我该如何去调查它是什么,然后解决?
我们使用 NHibernate 作为我们的数据层,所以据我所知没有使用 DataReader。没有返回大型结果集的已知查询,尽管有一个表具有包含压缩 XML 文档的列。
提前致谢
要求的其他信息
- Sql Server 设置为使用 TCP/IP 和共享内存协议
- 我们每页大约发出 4 个 DB 请求,这没什么可笑的
- 在高峰时间数据库服务器发送 1.5MB/秒
- 峰值时,Web 服务器 CPU 约为 60%
- 在峰值时,Web 服务器 NIC 负载为 13MB/秒。 8MB 正在发送,5MB 正在接收。同一个 NIC 处理 SQL 和 HTTP 流量
- 我们确实使用了一些缓存,但应用程序非常动态,因此大部分时间都需要最新数据
【问题讨论】:
-
在 perfmon 中,您是否知道网卡当前正在通过的每秒数据包数?
-
当前网络接口\字节发送/秒约为 560,000,尽管我们目前不是高峰时间,网络 IO 等待时间为 0 毫秒。这是我应该检查的性能数据吗?明天我会用问题发生的高峰时间的统计数据更新问题。
-
字节/秒足以显示每秒半兆,这在任何想象中都不是一个高数字。
-
是的,目前的表现还不错。明天我会用更相关的统计数据更新这个问题。有什么方法可以调查您提供的理论吗?
标签: asp.net sql-server sql-server-2005 nhibernate networking