我正在使用 C# 在 Asp.Net 3.5 上开发电子商务项目。我正在使用 3 层(数据 + 业务 + UI)结构来访问数据库中的数据(Msql 2005)。
有存储过程和所有的事情。(CRUD方法)
这里存在性能问题,项目运行缓慢。我在事务模型中找不到任何问题。
该项目也在海外共享主机上运行。数据库服务器和Web服务器运行在不同的机器上。数据库服务器有近1000个数据库。
我如何测试和了解问题出在哪里?
我正在使用 C# 在 Asp.Net 3.5 上开发电子商务项目。我正在使用 3 层(数据 + 业务 + UI)结构来访问数据库中的数据(Msql 2005)。
有存储过程和所有的事情。(CRUD方法)
这里存在性能问题,项目运行缓慢。我在事务模型中找不到任何问题。
该项目也在海外共享主机上运行。数据库服务器和Web服务器运行在不同的机器上。数据库服务器有近1000个数据库。
我如何测试和了解问题出在哪里?
由于有超过 1000 个数据库共享资源,我会采取可能是您的问题的尝试……如果您连接到数据库并且运行一个简单的查询需要 5 秒钟,那么您可以猜到问题所在。
我会在您的网络服务器上运行的“测试页”上添加一些秒表功能。这应该为您提供基本信息,以查看在等待数据库返回您的查询时是否存在“瓶颈”。如果你已经做到了那么我怀疑它会是你的网络服务器。
您的最后一个选择是设置一个简单的低规格机器,上面有数据库和 Web 服务器,然后进行测试。根据您的网站获得的流量,您应该能够很好地了解其响应时间。
YSlow之类的工具也可能会有所帮助,但这些工具通常更多地用于微调。
由于您在共享托管服务上运行,我猜这就是您的问题所在。您正在与这些服务器上的所有其他网站和数据库竞争服务器资源。
为了确保,我会设置一个模仿您的生产环境的本地环境。然后执行一些标准的压力测试,看看它的表现如何。如果它按照您的预期执行,那么它可能是您的托管解决方案。
使用共享托管解决方案,您确实物有所值。如果它是一个需要更快速度的系统,那么您应该考虑一个专用的托管解决方案。
我建议你看看 Tracing:
http://davidhayden.com/blog/dave/archive/2005/07/17/2396.aspx
这使您能够查看堆栈跟踪(文章中的最后一张图片),并定位您的性能瓶颈。
我开发的用于在我的 Web 应用程序上保存性能日志的快速解决方案可能会对您有所帮助。我有一个运行类似应用程序的 Web 服务器和数据库服务器。我编写了一个运行“基准测试”存储过程并返回运行时间的 Web 服务。我编写了一个在我的开发服务器上运行的 win 应用程序,它调用 Web 服务,将要运行的存储过程的名称传递给它,并计算整个请求所需的时间。win 应用程序将数据写入日志文件,并作为计划任务每 10 分钟运行一次。额外的花里胡哨包括当性能连续 3 次超过指定阈值、连接失败以及在缓慢的一段时间后恢复到正常性能时,自动向团队成员发送电子邮件。
This provides a general indication of how a user's experience on the website will be at any given time and serves as a warning bell for the team. Not exactly the best solution, but I wrote it in a couple of hours several months ago and have used the data it creates for troubleshooting purposes many times.