初识 performance_schema:轻松掌握MySQL性能监控

什么是 performance_schema

performance_schema 是 MySQL 5.8 版本的一个强大功能,它就像是一个内置的**"性能侦探"**,专门用来监控和分析 MySQL 服务器的资源消耗和等待情况。有了它,数据库管理员和开发者就能实时了解服务器的运行状态,从而更好地进行性能调优。

performance_schema 的独特之处

实时监控数据库内部活动: performance_schema 能够实时看到 MySQL 服务器的内部活动情况。不同于 information_schema 主要提供的元数据信息,performance_schema 更侧重于收集和分析与性能相关的运行数据。 想看看当前服务器上有哪些活跃的线程吗?简单一条命令就行:

sql 复制代码
SELECT * FROM performance_schema.threads;

这将让我们一目了然地看到所有活跃线程的信息,帮助监控线程的执行情况。

**事件监控机制:**它通过监视服务器内的各种事件,比如函数调用、SQL 语句的解析和排序过程,甚至是操作系统的等待时间,来了解资源的消耗情况。这样,就能清楚地知道 MySQL 是如何在处理任务时消耗资源的。 想要查看当前执行的 SQL 语句及其资源消耗吗?试试这个查询:

sql 复制代码
SELECT * FROM performance_schema.events_statements_current; 

这将列出正在执行的 SQL 语句,以及它们的执行时间和资源消耗情况。

**本地事件记录:**performance_schema 中的事件数据只记录在本地服务器上,不会写入到 binlog 中,也不会通过主从复制传到其他服务器。这意味着这些数据仅供本地分析使用,保证了数据的安全性和私密性。

事件摘要和分析: 它还提供了事件的历史记录和摘要数据,能够详细分析特定线程或资源(如互斥锁或文件)的活动情况,帮助快速识别出性能瓶颈。 想查看历史事件的摘要吗?用这条 SQL 语句:

sql 复制代码
SELECT * FROM performance_schema.events_statements_history;

轻量级性能监控: 启用 performance_schema 并不会对服务器的性能造成太大影响。它通过服务器内部的"检测点"来收集事件数据,不需要额外的线程或任务,大大降低了开销。

数据存储在内存中: performance_schema 采集的数据都存储在内存里,一旦服务器重启,这些数据就会丢失。所以,它更适合用来做实时的性能分析,而不是用来长期保存数据。

跨平台支持: MySQL 5.8 在所有平台上都支持事件监控功能,不过不同平台上的计时器类型可能会有所不同。这就意味着,在各个平台上度量时间开销的方式可能会有所差异。

设计目标

performance_schema 的设计目标是:

  • 不改变服务器的正常行为,即使开启了 performance_schema,也不会影响 MySQL Server 的正常运行。
  • 尽量减少对服务器性能的影响,让性能监控的开销尽可能小,适合长时间持续启用。
  • 即使 performance_schema 在采集数据时出现问题,也不会影响到服务器的正常运行。

快速上手 performance_schema

在 MySQL 5.8 中,performance_schema 默认是已经启用的。只需要查询 performance_schema 数据库中的表,就能监控服务器的性能了。

比如,想查询当前活跃的线程,可以用:

sql 复制代码
SELECT * FROM performance_schema.threads;

或者,想查看当前 SQL 语句的执行事件,可以用:

sql 复制代码
SELECT * FROM performance_schema.events_statements_current;

这些简单的查询就能帮助快速了解 MySQL 服务器的当前运行状态,而且完全不需要特殊的配置。

performance_schema 的表及其作用

performance_schema 数据库里的表主要分成几类:

  • setup 表:这些表用来配置和调整监控选项。可以通过修改这些表来启用或禁用特定的监控项目,比如 SQL 语句的监控或等待事件的监控。 比如,如果想启用对 SQL 语句的监控,可以这样修改 setup_instruments 表:
sql 复制代码
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES' WHERE NAME = 'statement/sql/%';
  • events_表**:**这些表记录了不同类别的事件数据,包括 SQL 语句的执行、等待事件和文件操作等等。 如果想查看当前的等待事件,可以这样查询:
sql 复制代码
SELECT * FROM performance_schema.events_waits_current;
  • summary 表:这些表提供了事件的统计信息和摘要数据,帮助分析资源的使用情况。比如,可以查看某个资源的使用频率和总耗时。 想要查看 SQL 语句的执行摘要吗?可以这样查询:
sql 复制代码
SELECT * FROM performance_schema.events_statements_summary_by_digest;

通过这些表,performance_schema 为开发者提供了一个全面的 MySQL 性能监控工具箱,让能够轻松地定位性能瓶颈,并进行有效的优化。

总结

在 MySQL 5.8 中引入的 performance_schema 功能,为我们提供了一个强大的性能监控工具。通过监控 MySQL 内部的各种事件,我们可以实时掌握资源的消耗情况和执行状态,从而更有效地优化数据库性能。

相关推荐
fengfuyao9855 分钟前
使用ubuntu串口数据收和发不一致问题
linux·数据库·ubuntu
张童瑶21 分钟前
Docker 下备份 Mariadb 数据库文件
数据库·docker·mariadb
进击的CJR27 分钟前
MySQL 8.0 OCP 英文题库解析(十八)
android·mysql·开闭原则
进击的CJR1 小时前
MySQL 8.0 OCP 英文题库解析(十四)
android·mysql·开闭原则
Forest_HAHA1 小时前
<8>-MySQL复合查询
数据库·mysql
march of Time1 小时前
图数据库介绍及应用,go和Java使用图数据库
java·数据库·golang
大博bs1 小时前
使用HashMap或者List模拟数据库插入和查询数据
数据库·list
xx155802862xx2 小时前
centos转移mysql的数据存储目录
linux·mysql·centos
进击的CJR2 小时前
MySQL 8.0 OCP 英文题库解析(十五)
数据库·mysql·开闭原则
羊小猪~~2 小时前
数据库学习笔记(十五)--变量与定义条件与处理程序
数据库·人工智能·笔记·后端·sql·学习·mysql