天天看点

MySQL 性能监控4大指标——第一部分

查询吞吐量

查询执行性能

连接情况

缓冲池使用情况

mysql 用户可以接触到数百个数据库指标,因此,在本文中,笔者将专注于能帮助我们实时了解数据库健康与性能的关键指标。

不同版本与技术的兼容性

本系列文章讨论的一些监控策略只适用于 mysql 5.6与5.7版本。这些版本间的差异将在后文中提及。

本文列出的大多数指标与监控策略同样适用于与 mysql 兼容的技术,诸如 mariadb 与 percona 服务器,不过带有一些明显的差别。例如,mysql workbench(工作台)中的一些特性(在本系列第二篇中有详细介绍)就与当下的一些 mariadb 版本不兼容。

MySQL 性能监控4大指标——第一部分

名称

描述

指标类型 可用性

questions

已执行语句(由客户端发出)计数

work:吞吐量 服务器状态变量

com_select

select 语句

writes

插入,更新或删除

work:吞吐量 根据服务器状态变量计算得到

在监控任何系统时,你最关心的应该是确保系统能够高效地完成工作。数据库的工作是运行查询,因此在本例中,你的首要任务是确保 mysql 能够如期执行查询。

通过以下指令,查询诸如 <code>questions</code> 或 <code>com_select</code> 服务器状态变量的值:

你也可以监控读、写指令的分解情况,从而更好地理解数据库的工作负载、找到可能的瓶颈。通常,读取查询会由 <code>com_select</code> 指标抓取,而写入查询则可能增加三个状态变量中某一个的值,这取决于具体的指令:

应该设置告警的指标:questions

当前的查询速率通常会有起伏,因此,如果基于固定的临界值,查询速率常常不是一个可操作的指标。但是,对于查询数量的突变设置告警非常重要——尤其是查询量的骤降,可能暗示着某个严重的问题。

查询性能

MySQL 性能监控4大指标——第一部分

查询运行时间

每种模式下的平均运行时间

work:性能 性能模式查询

查询错误

出现错误的 sql 语句数量

work:错误 性能模式查询

slow_queries

超过可配置的<code>long_query_time</code> 限制的查询数量

work:性能 服务器状态变量

性能模式语句摘要

性能模式的 <code>events_statements_summary_by_digest</code> 表格中保存着许多关键指标,抓取了与每条标准化语句有关的延迟、错误和查询量信息。从该表截取的一行样例显示,某条语句被执行了两次,平均执行用时为 325 毫秒(所有计时器的测量值都以微微秒为单位):

想要按模式抽取出以微秒为单位的平均运行时间,你可以这样查询性能模式:

相似地,按模式计算出现错误的语句总数,可以这么做:

sys 模式

或者查看哪些标准化语句出现了错误:

慢查询

除了性能模式与 sys 模式中丰富的性能数据,mysql 还提供了一个 <code>slow_queries</code> 计数器,每当查询的执行时间超过 <code>long_query_time</code> 参数指定的值之后,该计数器就会增加。默认情况下,该临界值设置为10秒。

<code>long_query_time</code> 参数的值可通过一条指令进行调整。例如,将慢查询临界值设置为5秒:

(请注意,你可能要关闭会话,再重新连接至数据库,这些更改才能在会话层生效。)

调查查询性能问题

如果你的查询运行得比预期要慢,很可能是某条最近修改的查询在捣鬼。如果没有发现特别缓慢的查询,接下来就该评估系统级指标,寻找核心资源(cpu,磁盘 i/o,内存以及网络)的限制。cpu 饱和与 i/o 瓶颈是常见的问题根源。你可能还想检查 <code>innodb_row_lock_waits</code> 指标,该指标记录着 innodb 存储引擎不得不停下来获得某行的锁定的次数。从 mysql 5.5 版本起,innodb 就是默认的存储引擎,mysql 对 innodb 表使用行级锁定。

应该设置告警的指标:

查询运行时间:管理关键数据库的延迟至关重要。如果生产环境中数据库的平均查询运行时间开始下降,应该寻找数据库实例的资源限制,行锁或表锁间可能的争夺,以及客户端查询模式的变化情况。

查询错误:查询错误的猛增可能暗示着客户端应用或数据库本身的问题。你可以使用 sys 模式快速查找可能导致问题的查询。例如,列举出返回错误数最多的10条标准化语句:

敬请期待本文第二部分,主要介绍 mysql 连接与缓冲池。