MySQL中的系统库(一):初识Performance_schema

发布于:2025-06-11 ⋅ 阅读:(32) ⋅ 点赞:(0)

MySQL中的系统库

系统库简介

MySQL有几个系统数据库,这几个数据库包含了 MySQL 服务器运行过程中所需的一些信息及一些运行状态的信息,现在我们简单学习下。
在这里插入图片描述

performance_schema
这个数据库里主要保存了 MySQL 服务器运行过程中的一些状态信息,算是对 MySQL 服务器的一个性能监控。包括统计最近执行了那些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等信息。

information_schema
这个数据库保存着 MySQL 服务器维护的所有数据库信息,比如有哪些表、哪些视图、哪些触发器、哪些列,哪些索引。这些是一些描述性信息,称之为元数据。

sys
这个数据库通过视图的形式把 information_schema 和 performance_schema 结合起来,让程序猿可以更方便地了解MySQL的一些性能信息。

mysql
主要存储了 MySQL 的用户帐户和权限信息,还有一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。

何为Performance_schema

MySQL 的 performance_schema 是运行在较低级别的用于监控 MySQL_Server 运行过程中的资源消耗、资源等待等情况的一个功能特性,它具有以下特点。

运行在较低级别:采集的东西相对比较底层,比如磁盘文件、表IO、表锁等。

  • performance_schema 提供了一种在数据库运行时实时检查 server 内部执行情况的方法。performance_schema 数据库的表使用 performance_schema 存储引擎。该数据库主要关注数据库运行过程中的性能相关数据。

  • performance_schema 通过监视 server 的事件来实现监视其内部执行情况,“事件”就是在Server 内部活动中所做的任何事件以及对应的时间消耗,利用这些信息来判断 Server 中的相关资源被消耗在哪里。一般来说,事件可以是函数调用、操作系统的等待、SQL 语句将执行的阶段[如 SQL 语句执行过程中的 parsing (解析)或 sorting (排序)阶段]或整个 SQL 语句的集合。采集时间可以方便地提供 server 中的相关存储引擎对磁盘文件、表IO、表锁等资源的同步调用信息。

  • 当前活跃事件、历史事件和事件摘要相关表中记录的信息,能提供某个事件的执行次数、使用时长,进而可用于分析与某个特定线程、特定对象(如mutex或file)相关联的活动。

  • performance_schema 存储引擎使用 Server 源代码中的“检测点”来实现事件数据的收集。对于 performance_schema 实现机制本身的代码没有相关的单独线程来检测,这与其他功能(如复制或事件计划程序)不同。
    收集到的事件数据被存储在 performance_schema 数据库的表中。对于这些表可以使用 SELECT 语句查询,也可以使用 SQL 语句更新 performance_schema 数据库中的表记录(比如动态修改 performance_schema 的以“setup_”开头的配置表,但要注意,配置表的更改会立即生效,这会影响数据收集)。

  • performance_schema 的表中数据不会持久化存储在磁盘中,而是保存在内存中,一旦服务器重启,这些数据就会丢失(包括配置表在内的整个 performance_schema 下的所有数据)。

performance_schema 使用

通过上面介绍,相信你对于什么是 performance_schema 这个问题了解得更清晰了。下面我们开始介绍 performance_schema 的使用。

检查当前数据库版本是否支持

performance_schema 被视为存储引擎,如果该引擎可用,则应该在 information_schema 表或 show engines语句的输出中可看到他的 support 字段是 YES,如下所示。

-- 方式一
select * from information_schema.engins;
-- 方式二
show engines;

在这里插入图片描述
在这里插入图片描述
当我们看到performance_schema对应的 support 字段值为 YES 时,就表示当前的数据库版本是支持 performance_schema 的。但确认了数据库实例支持 performance_schema 存储引擎就可以使用了吗?NO,很遗憾,performance_shema 在MySQL 5.6 及之前的版本中默认没有启用,在MySQL 5.7 及之后的版本中才修改为默认启用。

show variables like 'performance_shema';

在这里插入图片描述
如果要显示地启用或关闭 performance_shema,则需要使用参数 performance_schema=ON/OFF来设置,并在my.cnf中进行配置。注意:该参数为只读参数,需要在实例启动之前设置才生效。

现在可通过查询 information_schema.tables 表中与 performance_schema 存储引擎相关的元数据,或在 performance_schema 库下使用 show tables 语句来了解其存在哪些表。

使用show tables语句来查询有哪些 performance_schema 引擎表。

现在,我们知道了当前版本中,performance_schema 库下一共有87个表。
在这里插入图片描述
在这里插入图片描述
那么这些表都用于存放什么数据呢?我们如何使用它们来查询数据呢?先来看看我们这表是如何分类的。

performance_schema 表的分类

performance_schema 库下的表可以按照监视的不同维度进行分组,例如:按照不同的数据库对象进行分组、按照不同的事件类型进行分组,或者按照事件类型分组之后,再进一步按照账号、主机、程序、线程、用户等进行细分。

下面介绍按照事件类型分组记录性能事件数据的表。

• 语句事件记录表:记录语句事件信息的表,包括以下几种。

  • events_statements_current(当前语句事件表)
  • events_statements_history(历史语句事件表)
  • events_statements_history_long(长语句历史事件表)
  • summary表(聚合后的摘要表)

其中,summary表还可以根据账号(account)、主机(host)、程序(program)、线程(thread)、用户(user)和全局(global)再进行细分。

show tables like 'events_statement%';

在这里插入图片描述
在这里插入图片描述

  • 等待事件记录表:与语句事件记录表类似
show tables like 'event_wait%';

在这里插入图片描述

  • 阶段事件记录表:语句记录执行阶段事件的表,与语句事件记录表类似。
show tables like 'events_stage%';

在这里插入图片描述

  • 事务事件记录表:记录与事务相关事件的表,与语句事件记录表类似。
show tables like 'events_transaction%';

在这里插入图片描述

  • 监视文件系统层调用的表
show tables like '%file%';

在这里插入图片描述

  • 监视内存使用的表
show tables like '%memory%';

在这里插入图片描述

  • 动态对 performance_schema 进行配置的配置表
show tables like '%setup%';

在这里插入图片描述

现在,我们已经大概知道了performance_schema中主要表的分类,但如何使用这些表来提供性能事件数据呢?
可以关注下篇文章!