建立基线指标
基线是数据度量的集合,可帮助你了解应用程序或服务器性能的正常状态。 不断收集数据可识别出正常状态中的变化。 基线可以简单地表示为随时间变化的 CPU 利用率图,也可以复杂地表示为指标聚合,以提供来自特定应用程序调用的粒度级别性能数据。 基线的粒度取决于数据库和应用程序性能的关键性。
使用任何类型的应用程序工作负荷时,必须建立工作基线。 基线可帮助你确定是否应在正常参数内考虑正在进行的问题,或者是否已超过给定阈值。 如果没有基线,遇到的每个问题都可以视为正常问题,因此不需要任何额外的干预。
关联 SQL Server 和操作系统性能
在 Azure 虚拟机上部署 SQL Server 时,将 SQL Server 的性能与基础操作系统的性能相关联至关重要。 如果使用 Linux 作为作系统,则需要安装 InfluxDB、 Collectd 和 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 毫秒的值。
系统\处理器队列长度 - 此数字指示等待处理器上的时间的线程数。 如果大于零,则表示 CPU 压力,表明工作负荷可能受益于更多的 CPU。
SQLServer:Buffer Manager\Page 生存期 - 页生存期指示 SQL Server 期望页在内存中生存的时间。 此设置找不到合适的值。 较早的文档将 300 秒指定为适当时间,但那些文档编写于 32 位时期,当时服务器的 RAM 少得多。 你应不断监视该值,并对突然的下降进行评估。 计数器值的突然下降可能表示查询模式差、外部内存压力大(例如,服务器正在运行大型 SSIS 包),也可能只是正常的系统处理,例如在大型数据库上运行一致性检查。
SQLServer:SQL Statistics\Batch Requests/sec - 此计数器可用于评估 SQL Server 随时间推移的一致繁忙程度。 再次没有好的或错误的值,但可以将此计数器与 % 处理器时间一起使用,以便更好地了解工作负荷和基线。
SQLServer:SQL Statistics\SQL Compiles/sec 和 SQL Re-Compiles/sec - 当 SQL Server 必须编译或重新编译查询的执行计划时,这些计数器将更新,因为计划缓存中没有现有计划,或者由于更改而使计划失效。 重新编译可以通过重新编译查询提示来表示 T-SQL,或者可以表示计划缓存上由许多临时查询或简单的内存压力所导致的内存压力。
这些计数器只是你可以使用的可用性能监视器计数器的示例。 虽然这些计数器提供了良好的性能基线,但可能需要检查更多计数器来识别特定的性能问题。
等待统计信息
线程正在执行并且必须等待不可用资源时,SQL Server 会跟踪这些指标。 可通过动态管理视图 (DMV) sys.dm_os_wait_stats 轻松识别此信息。 此信息对于理解数据库的基线性能至关重要,并且有助于确定与查询执行和硬件限制有关的特定性能问题。 确定适当的等待类型和相应的解决方法对于解决性能问题至关重要。 在 Azure SQL 平台上可获得等待统计信息。