前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >performance_schema 使用快速入门

performance_schema 使用快速入门

原创
作者头像
不惑
发布2024-09-05 20:21:00
1820
发布2024-09-05 20:21:00
举报
文章被收录于专栏:Goboy

performance_schema 使用快速入门

在数据库性能调优的过程中,performance_schema 是一个非常有用的工具,它可以帮助我们深入分析 MySQL 内部的性能表现。通过合理使用 performance_schema,我们可以发现数据库中的性能瓶颈并做出优化。本文将以 MySQL 5.8 为例,详细介绍如何使用 performance_schema。

检查数据库是否支持 performance_schema

在 MySQL 5.8 中,performance_schema 默认已启用,可以直接开始使用它。但是,为了确保其正常工作,首先我们需要检查当前数据库实例是否支持 performance_schema

可以使用以下两种方法来确认:

使用 INFORMATION_SCHEMA.ENGINES 表查询

代码语言:sql
复制
SELECT * FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE = 'PERFORMANCE_SCHEMA';

使用 SHOW ENGINES 命令

代码语言:sql
复制
SHOW ENGINES;

在查询结果中,若 PERFORMANCE_SCHEMASupport 字段值为 YES,则表明该功能在当前数据库中可用。

如果执行 SHOW ENGINES,结果如下:

代码语言:sql
复制
+--------------------+---------+------------------------+
| Engine             | Support | Comment                |
+--------------------+---------+------------------------+
| PERFORMANCE_SCHEMA | YES     | Performance Schema     |
+--------------------+---------+------------------------+

这意味着 performance_schema 已启用,可以开始使用它来分析数据库性能。

启用或关闭 performance_schema

虽然 MySQL 5.8 默认启用 performance_schema,但在某些情况下,可能需要手动启用或关闭它。这可以通过配置文件或 SQL 语句来完成。

在配置文件中启用或关闭 performance_schema打开 MySQL 的配置文件 my.cnf,添加以下配置来显式

启用:performance_schema=ON 或关闭:performance_schema=OFF

启动 MySQL 后查看启用状态 启动 MySQL 之后,可以通过下面的语句确认 performance_schema 是否成功启用:

代码语言:sql
复制
SHOW VARIABLES LIKE 'performance_schema';

如果返回值为 ON,则说明 performance_schema 已成功启用;如果为 OFF,则表示功能未启用。

SQL 语句临时修改 performance_schema 的状态(而不是永久修改配置文件),可以使用以下命令:

代码语言:sql
复制
SET GLOBAL performance_schema = ON;

示例:执行以下 SQL 语句:SHOW VARIABLES LIKE 'performance_schema';

代码语言:sql
复制
+-------------------+-------+
| Variable_name      | Value |
+-------------------+-------+
| performance_schema | ON    |
+-------------------+-------+

这里的 ON 表示 performance_schema 已启用。

performance_schema 表的分类

performance_schema 是由一系列表组成的,这些表主要用于收集数据库运行过程中的各种性能数据。为了更方便地使用,这些表按照不同维度进行分类。了解这些表的分类和用途,可以帮助在实际使用中迅速找到所需的信息。

以下是常用的 performance_schema 表分类:

语句事件记录表

  • events_statements_current:记录当前执行的 SQL 语句。
  • events_statements_history:记录最近执行过的 SQL 语句,最多保存 10 条历史记录。
  • events_statements_history_long:记录更长时间的 SQL 语句历史,最多保存 10000 条记录。
  • 相关 summary 表:这些汇总表提供了 SQL 语句的执行情况摘要,可以根据用户、主机、线程等维度进行分析。

等待事件记录表

  • 这些表用于记录等待事件的详细信息,如线程在等待 I/O 操作或锁时的情况。与语句事件记录表类似,也有 currenthistory 表。

阶段事件记录表

  • 记录 SQL 语句执行过程中各个阶段的细节,如优化、执行、提交等阶段的情况。

事务事件记录表

  • 专门记录与事务相关的事件,如事务开始、提交、回滚等操作。

示例:可以通过以下 SQL 查询语句,找出占用执行时间最长的 SQL 语句:

代码语言:sql
复制
SELECT
	DIGEST_TEXT,
	COUNT_STAR,
	SUM_TIMER_WAIT
FROM
	PERFORMANCE_SCHEMA.events_statements_summary_by_digest
ORDER BY
	SUM_TIMER_WAIT DESC
LIMIT 5;

这个查询可以帮助快速定位哪些 SQL 语句是系统的性能瓶颈,特别是哪些 SQL 语句执行得最慢、执行次数最多。

注意:

如果在查询时收到“Table 'PERFORMANCE_SCHEMA.events_statements_summary_by_digest' doesn't exist”的错误消息,可能有以下几个原因:

  • performance_schema 未启用

确保 performance_schema 已经启用。可以通过以下命令检查其状态:

代码语言:sql
复制
SHOW VARIABLES LIKE 'performance_schema';

如果返回结果显示 ValueOFF,则需要启用它。可以通过编辑 MySQL 配置文件或在运行时使用 SQL 命令来启用它。

  • 采集器未启用

即使 performance_schema 已启用,某些表也可能因为相关的采集器未启用而不可用。需要确保相关的采集器和消费者已经启用。例如,要启用语句事件的采集器,可以运行以下命令:

代码语言:sql
复制
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'statement/%';
  • 消费者未启用

同样,确保相关的消费者也已经启用。例如,要启用语句事件的消费者,可以运行以下命令:

代码语言:sql
复制
UPDATE performance_schema.setup_consumers SET ENABLED = 'YES' WHERE NAME LIKE 'events_statements_summary_by_digest%';
  • MySQL 版本问题

确保使用的 MySQL 版本支持 events_statements_summary_by_digest 表。这个表在较新的 MySQL 版本中才可用。可以通过以下命令检查 MySQL 版本:

代码语言:sql
复制
SELECT VERSION();

performance_schema 的配置与使用

默认情况下,MySQL 不会启用所有的事件采集器(instruments)和数据消费者(consumers)。需要手动配置,以便收集所需的性能数据。

启用采集器:如果希望监控某个特定的事件(比如等待事件),可以通过以下 SQL 语句来打开相关采集器:

代码语言:sql
复制
UPDATE PERFORMANCE_SCHEMA.setup_instruments
SET ENABLED = 'YES',
 TIMED = 'YES'
WHERE
	NAME LIKE 'wait/%';

启用数据保存:同样,还需要打开消费者来保存相关的事件数据:

代码语言:sql
复制
UPDATE PERFORMANCE_SCHEMA .setup_consumers
SET ENABLED = 'YES'
WHERE
	NAME = 'events_waits_current';

查询事件表:配置完成后,可以通过查询事件表来查看性能数据。例如,查看当前的等待事件:

代码语言:sql
复制
SELECT * FROM performance_schema.events_waits_current;

示例:如果想查看所有等待事件的汇总信息,可以运行以下 SQL 查询:

代码语言:sql
复制
SELECT
	EVENT_NAME,
	COUNT_STAR,
	SUM_TIMER_WAIT
FROM
	PERFORMANCE_SCHEMA .events_waits_summary_global_by_event_name
ORDER BY
	SUM_TIMER_WAIT DESC;

这将列出所有等待事件,并按等待时间总和排序,帮助识别哪些操作是导致性能瓶颈的主要原因。

小结

performance_schema 是 MySQL 提供的强大性能监控工具,特别是在 MySQL 5.8 中,它默认启用且功能强大。通过合理配置 performance_schema,可以详细了解数据库的运行状况,识别性能瓶颈并优化系统。无论是分析 SQL 语句、等待事件还是事务执行情况,performance_schema 都能提供精确的数据支持,是进行数据库性能调优的利器。

最后,虽然 performance_schema 提供了大量的性能数据,但我们通常不会直接操作这些表,而是借助 sys schema 下的视图来获取性能报告。sys schema 的数据主要来源于 performance_schema 和 INFORMATION_SCHEMA,因此熟悉 performance_schema 是高效使用 sys schema 的基础。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • performance_schema 使用快速入门
  • 检查数据库是否支持 performance_schema
  • 启用或关闭 performance_schema
  • performance_schema 表的分类
  • performance_schema 的配置与使用
  • 小结
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档