初识 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 内部的各种事件,我们可以实时掌握资源的消耗情况和执行状态,从而更有效地优化数据库性能。

相关推荐
云和数据.ChenGuang3 分钟前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys31 分钟前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi31 分钟前
SQL注入的那些面试题总结
数据库·sql
建投数据1 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi2 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀3 小时前
Redis梳理
数据库·redis·缓存
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天3 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺3 小时前
分布式系统架构:服务容错
数据库·架构
独行soc4 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘