![SQL 性能,如何准确衡量瓶颈](https://linux22.com/image/555246/SQL%20%E6%80%A7%E8%83%BD%EF%BC%8C%E5%A6%82%E4%BD%95%E5%87%86%E7%A1%AE%E8%A1%A1%E9%87%8F%E7%93%B6%E9%A2%88.png)
昨天,我(程序员)和托管部门的一位同事开始进行一系列测试,以解决我们网站的性能问题。我们正在运行一台装有 Windows Server 2008 和 8GB RAM 的服务器。我们将为我们的服务器升级 8GB RAM,因为我们的客户发现后端(Sitecore)的性能很慢。我们认为我们的性能问题与服务器上的数据库太多有关。我们快速查看了测试服务器上的性能计数器,但我们的测试服务器与实时服务器完全不同。我们在测试服务器上隔离了一些网站,并在该服务器上启动了一些压力测试/数据库测试,并尝试使用我们没有经验的计数器进行了一些测量。我们如何使用性能计数器解决实时服务器上的问题?有没有关于如何解决此类性能问题的好指南?任何建议都将不胜感激!
答案1
我认为性能计数器不会对此给出有用的答案,因为它们实际上只能告诉您某些事情经常发生或您获得了什么样的吞吐量,但您已经知道吞吐量并不大。
我查看了 MS SQL Server 上可用的性能计数器,但其中没有任何东西让我感觉特别有用。您可以尝试 SQLServer:等待统计类别中的某些计数器来获取一些指示。
不过,我首先要回答的是常见的问题:
- 很多时候,数据库支持的网站的性能瓶颈与数据库查询速度慢有关。这通常是由于缺少索引和查询设计不良造成的。根据您的 SQL 版本,您应该能够通过 Google 搜索一些识别慢查询的建议。
- 如果您运行 MySQL 作为数据库,则应该定期分析慢查询日志。
- 对于 MySQL,同样检查服务器健康变量,尤其是完整连接选择。
- 如果可能的话,将数据库服务器与 Web 服务器分开。持续的上下文切换对性能也不好。
答案2
在之前的工作中,我负责寻找一些性能问题并建议纠正方法。我总是从查看 perfmon 中的一些基本计数器开始。
%Disk Time
%Idle Time
Avg Disk Queue Length
Avg Disk sec/Transfer
Pages/sec
% Processor Time
我还将尝试隔离应用程序中的一些慢速页面并检查它们的查询。有时,高访问量页面(如主页)可能会有慢速查询,从而减慢其他正常运行的查询。一旦我找到了一些查询,我通常会在管理工作室中执行它们,并查看它们的查询计划以找出诸如缺失或不正确的索引之类的痛点。这最终是非常基本的。这对我来说也很容易,因为它是一个 SAAS 应用程序,许多客户端都使用相同的软件连接到保存服务器。
速度缓慢可能是由于您正处于一个自然临界点,即您的网络流量加上数据库服务器对于一个设备来说太多了。但在您将 5,000 美元投入到新的数据库服务器之前,请先查看一下性能监控数据,看看是否有问题尚未解决。就我而言,问题在于直接连接的存储阵列上的磁盘 IO 太多。添加额外的主轴是一种可能的解决方案。以及添加更多内存以允许更多缓存,并将日志文件卸载到机器中的另一个 RAID 阵列上。在这种情况下,Web 层也不在 DB 服务器上,所以这对我来说不是问题。