建立基线指标
基线是一组数据度量值,有助于了解应用程序或服务器性能的正常“稳定状态”。 不断收集数据可识别出正常状态中的变化。 基线可以简单地表示为随时间变化的 CPU 利用率图,也可以复杂地表示为指标聚合,以提供来自特定应用程序调用的粒度级别性能数据。 基线的粒度取决于数据库和应用程序性能的关键程度。
对于任意类型的应用程序工作负载,必须建立工作基线。 基线将帮助你确定应认为发生的问题处于正常参数范围内,还是超过了给定阈值。 如果没有基线,可以将遇到的每个问题视为正常,无需任何其他干预。
关联 SQL Server 和操作系统性能
在 Azure 虚拟机上部署 SQL Server 时,将 SQL Server 的性能与基础操作系统的性能相关联至关重要。 如果使用 Linux 作为操作系统,则需安装 InfluxDB、Collected 和 Grafana 来捕获数据,类似于 Windows 性能监视器。 这些服务从 SQL Server 收集数据,并提供图形界面来查看数据。 可以使用 Linux 上的这些工具(或 Windows 上的性能监视器)并查看特定于 SQL Server 的数据,例如 SQL Server 等待统计信息。 结合使用这些工具将能够识别硬件或代码中的瓶颈。 以下性能监视器计数器是有用的 Windows 指标的一些示例,可以通过它们确定 SQL Server 工作负载的良好基线:
Processor(_Total)% 处理器时间 - 此计数器测量服务器上所有处理器的 CPU 利用率。 它可以很好地表示整体工作负载,并且与其他计数器结合使用时,此计数器可以识别查询性能问题。
Paging File(_Total)% 用法 - 在正确配置的 SQL Server 中,内存不应分页到磁盘上的分页文件。 但在某些配置中,你可能正在运行其他服务,这些服务占用系统内存,并导致操作系统将内存分页到磁盘,从而引起性能下降。
PhysicalDisk(_Total)\Avg.Disk sec/Read and Avg.Disk sec/Write - 此计数器为存储子系统的运行状况提供了一个很好的指标。 大多数情况下,延迟值不应超过 20 毫秒,对于高级存储,该值应小于 10 毫秒。
System\Processor Queue Length - 此数字表示在等待处理器上时间的线程数。 如果大于零,则表示 CPU 压力大,这表明增加 CPU 对工作负载有益。
SQLServer:Buffer Manager\Page life expectancy - 页生存期表示 SQL Server 期望页面在内存中生存的时间长度。 此设置没有适当的值。 较早的文档将 300 秒指定为适当时间,但那些文档编写于 32 位时期,当时服务器的 RAM 少得多。 你应不断监视该值,并对突然的下降进行评估。 计数器值的突然下降可能表示查询模式差、外部内存压力大(例如,服务器正在运行大型 SSIS 包),也可能只是正常的系统处理,例如在大型数据库上运行一致性检查。
SQLServer:SQL Statistics\Batch Requests/sec - 此计数器适用于评估 SQL Server 随时间的持续繁忙程度。 同样,值没有好坏之分,但你可以将此计数器与“处理器时间百分比”结合使用,从而更好地了解工作负载和基线。
SQLServer:SQL Statistics\SQL Compilations/sec 和 SQL Re-Compilations/sec - 由于计划缓存中没有现有计划,或者计划因更改而无效,因而 SQL Server 必须编译或重新编译查询的执行计划时,这些计数器将更新。 重新编译可以通过重新编译查询提示来表示 T-SQL,或者可以表示计划缓存上由许多临时查询或简单的内存压力所导致的内存压力。
这些计数器只是你可以使用的可用性能监视器计数器的示例。 尽管上述计数器提供了良好的性能基线,但你可能需要检查更多计数器才能识别特定的性能问题。
等待统计信息
线程正在执行并且必须等待不可用资源时,SQL Server 会跟踪这些指标。 可通过动态管理视图 (DMV) sys.dm_os_wait_stats
轻松识别此信息。 此信息对于理解数据库的基线性能至关重要,并且有助于确定与查询执行和硬件限制有关的特定性能问题。 确定适当的等待类型和相应的解决方案对于解决性能问题至关重要。 在 Azure SQL 平台上可获得等待统计信息。