合 SQL Server性能监视器(perfmon)监视资源使用情况
Tags: MSSQLSQL Server优化性能性能监视perfmon性能监视器数据收集器
简介
如果运行的是 Microsoft Windows 服务器操作系统,可使用性能监视器图形工具来测量 SQL Server 的性能。 可以查看 SQL Server 对象、性能计数器以及其他对象的行为,这些对象包括处理器、内存、缓存、线程和进程。 每个对象都有一个相关的计数器集,用于测量设备使用情况、队列长度、延时情况,另外还有吞吐量及内部拥塞指示器。
使用性能监视器可以监视系统资源的使用率。 以计数器的形式收集实时性能数据并查看。 可将计数器用于服务器资源,如处理器和内存使用。 还可将其用于许多 Microsoft SQL Server 资源,如锁和事务。
性能监视器的优点
性能监视器可用于同时监视 Windows 操作系统和 SQL Server 计数器,以便确定 SQL Server 性能与 Windows 性能之间可能存在的关联。 例如,同时监视 Windows 磁盘输入/输出 (I/O) 计数器和 SQL Server 缓冲区管理器计数器可以揭示整个系统的行为。
通过性能监视器可获取当前 SQL Server 活动和性能的统计信息。 使用性能监视器可以:
- 同时查看任意多台计算机中的数据。
- 查看和更改图表以反映当前的活动,以及显示按用户定义的频率进行更新的计数器值。
- 从图表、日志、警报日志和报告将数据导出到电子表格或数据库应用程序中,以进行进一步的操作和打印。
- 添加系统警报,这些警报可在警报日志中列出事件,并可以通过发出网络警报来通知您。
- 当计数器值首次或每次超过或低于用户定义的值时,运行预定义的应用程序。
- 创建日志文件,其中包含有关来自不同计算机的各种对象的数据。
- 将其他现有日志文件中的选定区域追加到一个文件上,以形成长期存档。
- 查看当前活动报告,或从现有日志文件创建报告。
- 保存各个图表、警报、日志或报告设置或整个工作空间设置,以备再次使用。
性能监视器的性能
当监视 SQL Server 和 Microsoft Windows 操作系统以调查与性能有关的问题时,请首先注意以下三个主要方面:
- 磁盘活动
- 处理器利用率
- 内存使用率
监视运行性能监视器的系统会轻微地影响计算机性能。 因此,要么将性能监视器数据记录到另一个磁盘或计算机上,以便减少对所监视计算机的影响,要么从远程计算机上运行性能监视器。 只监视您感兴趣的计数器。 如果监视的计数器过多,将会增加监视过程中使用的资源开销,并影响所监视计算机的性能。
性能监视器任务
任务说明 | 主题 |
---|---|
描述何时使用性能监视器,并讨论使用性能监视器时的性能开销。 | 运行性能监视器 |
描述如何监视磁盘计数器,以便确定其 SQL Server 组件生成的磁盘活动和 I/O 量。 | 监视磁盘用量 |
描述如何监视 Microsoft SQL Server 实例,以便确定 CPU 使用率是否在正常范围内。 | 监视 CPU 用量 |
描述如何监视 SQL Server 实例,以便确认内存使用量是否在正常范围内。 | 监视内存用量 |
描述如何创建一个在达到性能监视器计数器的阈值时发出的警报。 | 创建 SQL Server 数据库警报 |
描述如何创建图表、警报、日志和报表,以便监视 SQL Server实例。 | 创建图表、警报、日志和报告 |
列出性能监视器用于在运行 SQL Server 实例的计算机中监视活动的对象和计数器。 | 使用 SQL Server 对象 |
列出性能监视器用于监视内存中 OLTP 活动的对象和计数器。 | SQL Server XTP(内存中 OLTP)性能计数器 |
在 Windows 中启动性能监视器
在“开始”菜单上,指向“运行”,在“运行”对话框中键入“perfmon”,然后选择“确定” 。
监视磁盘使用情况
Microsoft SQL Server 使用 Microsoft Windows 操作系统输入/输出 (I/O) 调用来对您的磁盘执行读和写操作。 SQL Server 管理何时以及如何执行磁盘 I/O,但是 Windows 操作系统执行基础 I/O 操作。 I/O 子系统包括系统总线、磁盘控制卡、磁盘、磁带驱动器、CD-ROM 驱动器以及许多其他 I/O 设备。 磁盘 I/O 是导致系统瓶颈的最常见原因。
监视磁盘活动涉及两个主要方面:
- 监视磁盘 I/O 及检测过度换页
- 隔离 SQL Server 产生的磁盘活动
有关详细信息,请参阅监视磁盘使用情况。
有关如何在 SQL Server 中排查 I/O 问题的详细信息,请参阅低 I/O 性能 - SQL Server 和磁盘 I/O 性能。
排查 I/O 问题导致的SQL Server性能缓慢问题:https://learn.microsoft.com/zh-cn/troubleshoot/sql/database-engine/performance/troubleshoot-sql-io-performance
磁盘延迟情况
测量 Windows 中 I/O 延迟的特定 性能监视器 计数器是LogicalDisk或PhysicalDisk下的 Avg Disk sec/ Read
、 Avg. Disk sec/Write
和 Avg. Disk sec/Transfer
(读取和写入) 累积。如果这些等待持续超过 10-15 毫秒,则 I/O 被视为瓶颈。
SQL Server使用等待类型来指示产品中不同位置的 I/O 等待。 与 I/O 相关的等待包括:
小于10 ms – 优秀
• 在 10 - 20 ms之间 – 正常
• 在20 - 50 ms之间 – 缓慢
• 大于50ms– 严重的I/O问题
监视 CPU 使用率
定期监视 Microsoft SQL Server 实例以确定 CPU 使用率是否在正常范围内。 持续的高 CPU 使用率可能表明需要升级 CPU 或需要增加多个处理器。 或者,高 CPU 使用率也可能表明应用程序的调整或设计不良。 优化应用程序可以降低 CPU 的使用率。
一个确定 CPU 使用率的有效方法是使用系统监视器中的 Processor:% Processor Time 计数器。 该计数器监视 CPU 执行非闲置线程所用的时间。 持续 80% 到 90% 的状态可能表明需要升级 CPU 或需要增加更多的处理器。 对于多处理器系统,应为每个处理器监视一个该计数器的独立实例。 这一值代表了在一个特定处理器上的处理器时间之和。 若要确定所有处理器的平均时间,请改用 System: %Total Processor Time 计数器。
另外还可以监视下列计数器来监视处理器的使用率:
Processor: % Privileged Time
对应于处理器执行 Microsoft Windows 内核命令(例如处理 SQL Server I/O 请求)所用时间的百分比。 如果 Physical Disk 计数器的值很高时该计数器的值也一直很高,则考虑安装速度更快或效率更高的磁盘子系统。
备注
不同的磁盘控制器和驱动程序所用的内核处理时间不同。 高效的控制器和驱动程序所用的特权时间较少,可留出更多的处理器时间给用户应用程序,从而提高总体的吞吐量。
Processor: %User Time
对应于处理器执行用户进程(例如 SQL Server)所用时间的百分比。
系统:Processor Queue Length
对应于等待处理器时间的线程数。 当一个进程的线程需要的处理器循环数超过可获得的循环数时,就产生了处理器瓶颈。 如果有很多进程在争用处理器时间,可能需要安装一个速度更快的处理器。 如果使用的是多处理器系统,则可以增加一个处理器。
检查处理器使用率时,需考虑 SQL Server 实例执行的工作类型。 如果 SQL Server 正在做大量的运算,例如包含聚合的查询,或受内存限制但不需要磁盘 I/O 的查询,此时所用的处理器时间可能是 100%。 如果这导致其他应用程序的性能降低,应尝试改变工作负荷。 例如,让计算机只运行 SQL Server实例。
若使用率为 100% 左右(表示在处理大量的客户端请求),可能表示进程正在排队,等待处理器时间,并因而导致出现瓶颈。 可以通过增加速度更快的处理器来解决这一问题。
监视内存使用量
配置 SQL Server 最大内存
默认情况下,随着时间的推移,SQL Server 实例可能会消耗服务器中大部分可用的 Windows 操作系统内存。 获取内存后,除非检测到内存压力,否则将不会释放内存。 这是由设计决定的,并不表示 SQL Server 进程中存在内存泄漏。 使用“最大服务器内存”选项以限制 SQL Server 在大多数情况下可获取的内存量。 有关详细信息,请参阅内存管理体系结构指南。
在 Linux 上的 SQL Server 中,通过 mssql-conf 工具和 memory.memorylimitmb 设置来内存限制。
监视操作系统内存
若要监视内存不足的情况,请使用下列 Windows Server 计数器。 许多操作系统内存计数器都可通过动态管理视图 sys.dm_os_process_memory 和 sys.dm_os_sys_memory 进行查询。