我们有一个在 IIS8 和 SQL2014 express 上运行的小型内部 ASP.NET 网站。
该服务器是现场专用服务器 2012 R2 VM,上面有 IIS 和 SQL 服务器。
服务器 CPU 使用率很少超过 25%,内存使用率达到 50%,磁盘几乎不动。
然而,网页有时会非常慢,有些查询可能需要几秒钟才能完成任何事情,这开始让我的用户感到沮丧(在某些情况下,单击编辑链接可能需要 10 秒钟才会出现文本框)。
由于服务器似乎没有被利用,有人能指出我从哪里开始寻找性能增强的正确方向吗?
答案1
首先,确保你的指标被正确收集。在虚拟环境中,你不一定依赖传统的性能计数器。主机可以(并且将)根据虚拟机的负载和它所管理的其他虚拟机的需求来调节对虚拟机的硬件分配。
您的问题没有太多细节可谈,但这里有一些一般性指示。
- SQL Server Express 的 RAM 上限为 1 GB。这可能会给你带来很大麻烦。请参阅SQL Server 版本比较了解更多限制。
- 查看主机服务器的负载。其他虚拟机是否正在运行?它们在做什么?
- 您的虚拟机管理程序是什么?它是如何调整的?
- 深入研究您的应用程序,看看它在与 SQL Server 交互时的表现如何。性能问题往往是由于查询编写不当造成的。启动 SQL Profiler 或进行跟踪以查看传入的查询。进行一些监控以找出问题所在。
答案2
调试?认真的。
有些查询可能需要几秒钟才能完成
抓住它们,分析它们。这不是第一次程序员不知道自己在做什么,或者没有考虑实际的负载场景(或无法进行测试),从而错过在生产负载下变得至关重要的索引。
在这种情况下,作为系统管理员你什么也做不了——这是程序员方面必须修复的问题。
还请测量磁盘延迟,因为这可能是罪魁祸首 - 但通常是:开始分析,进行负载测试(在单独的系统上)并找出代码中哪个部分速度快。
也就是说:还可以考虑通过 cloudflare 运行您的网站访问并让它们缓存 - 这可能会提供更快的用户体验。