Documentation Home
MySQL 8.0 参考手册  / 第 15 章 InnoDB 存储引擎  / 15.17 InnoDB 监视器  /  14.17.2 启用 InnoDB 监视器

14.17.2 启用 InnoDB 监视器

InnoDB为定期输出启用监视器时,大约每 15 秒 InnoDB将输出写入 mysqld服务器标准错误输出 ( )。stderr

InnoDB将监视器输出发送到 stderr而不是stdout 固定大小的内存缓冲区,以避免潜在的缓冲区溢出。

在 Windows上,stderr除非另有配置,否则定向到默认日志文件。如果要将输出定向到控制台窗口而不是错误日志,请使用 --console选项从控制台窗口中的命令提示符启动服务器。有关详细信息,请参阅第 5.4.2.1 节,“Windows 上的错误日志记录”

在 Unix 和类 Unix 系统上,stderr除非另有配置,否则通常指向终端。有关详细信息,请参阅第 5.4.2.2 节,“Unix 和类 Unix 系统上的错误日志记录”

InnoDB仅当您真正想要查看监视器信息时才应启用监视器,因为输出生成会导致一些性能下降。此外,如果监视器输出定向到错误日志,如果您稍后忘记通过删除监视器表来禁用监视器,日志可能会变得非常大。

笔记

为协助排除故障,在特定条件下InnoDB 暂时启用标准监视器输出。InnoDB有关详细信息,请参阅 第 14.21 节,“InnoDB 故障排除”

每个监视器都以包含时间戳和监视器名称的标头开头。例如:

=====================================
2014-10-16 16:28:15 7feee43c5700 INNODB MONITOR OUTPUT
=====================================

标准InnoDBMonitor ( INNODB MONITOR OUTPUT) 的标头也用于 Lock Monitor,因为后者在添加额外的锁信息后产生相同的输出。

InnoDB可以通过以下两种方式之一为周期性输出 启用标准监视器和锁定监视器:

  • 使用CREATE TABLE语句创建InnoDB与监视器相关联的特别命名的表。例如,要启用标准InnoDB监视器,您将创建一个InnoDB名为 innodb_monitor. 表空间监视器和表监视器也使用该CREATE TABLE方法启用。

    使用语法只是 通过 MySQL 的 SQL 解析器CREATE TABLE将命令传递给引擎的一种方式。InnoDB唯一重要的是表名并且它是一个InnoDB 表。表的结构和创建表的数据库是不相关的。如果关闭服务器,当您重新启动服务器时监视器不会自动重新启动。删除监视器表并发出新 CREATE TABLE语句以启动监视器。

    笔记

    CREATE TABLE启用监视器 的方法InnoDB已弃用,可能会在未来的版本中删除。从 MySQL 5.6.16 开始,您可以使用和 系统变量 启用标准InnoDB Monitor 和InnoDBLock Monitor 。innodb_status_outputinnodb_status_output_locks

  • 使用 innodb_status_outputinnodb_status_output_locks 系统变量,在 MySQL 5.6.16 中引入。

启用或禁用监视器 PROCESS需要权限 。InnoDB

启用标准 InnoDB 监视器

要为定期输出启用标准 InnoDB Monitor,请创建innodb_monitor表:

CREATE TABLE innodb_monitor (a INT) ENGINE=INNODB;

要禁用标准InnoDB监视器,请删除表:

DROP TABLE innodb_monitor;

从 MySQL 5.6.16 开始,您还可以 通过将系统变量设置为 来启用标准InnoDB监视器 。 innodb_status_outputON

SET GLOBAL innodb_status_output=ON;

要禁用标准InnoDB监视器,请设置 innodb_status_outputOFF

当您关闭服务器时,该 innodb_status_output变量被设置为默认OFF值。

启用 InnoDB 锁定监视器

要为定期输出启用InnoDB锁定监视器,请创建innodb_lock_monitor表:

CREATE TABLE innodb_lock_monitor (a INT) ENGINE=INNODB;

要禁用InnoDB锁定监视器,请删除表:

DROP TABLE innodb_lock_monitor;

从 MySQL 5.6.16 开始,您还可以 通过将系统变量设置为 来启用InnoDB锁定监视器 。与 启用Monitors 的方法 一样,必须启用 标准Monitor和 Lock Monitor才能定期打印Lock Monitor数据: innodb_status_output_locksONCREATE TABLEInnoDBInnoDBInnoDBInnoDB

SET GLOBAL innodb_status_output=ON;
SET GLOBAL innodb_status_output_locks=ON;

当您关闭服务器时, innodb_status_outputinnodb_status_output_locks 变量将设置为默认OFF值。

要禁用InnoDB锁定监视器,请设置 innodb_status_output_locksOFF。设置 innodb_status_output为 OFF 也可以禁用标准InnoDB监视器。

笔记

InnoDB为输出启用锁定监视器 SHOW ENGINE INNODB STATUS,您只需要启用 innodb_status_output_locks.

获取标准 InnoDB Monitor 按需输出

作为 InnoDB为定期输出启用标准监视器的替代方法,您可以InnoDB使用 SQL 语句按需获取标准监视器输出,该SHOW ENGINE INNODB STATUS语句将输出提取到您的客户端程序。如果您使用的是mysql 交互式客户端,如果您将通常的分号语句终止符替换为以下内容,则输出更具可读性\G

mysql> SHOW ENGINE INNODB STATUS\G

SHOW ENGINE INNODB STATUS如果启用了锁定监视器, 输出还包括InnoDB 锁定监视器数据。InnoDB

将标准 InnoDB 监视器输出定向到状态文件

通过在启动时指定选项,InnoDB可以启用 标准监视器输出并将其定向到状态文件。--innodb-status-file使用此选项时,InnoDB创建一个 在数据目录中命名的文件,并大约每 15 秒向其中写入一次输出。 innodb_status.pid

InnoDB服务器正常关闭时删除状态文件。如果发生异常关机,则可能必须手动删除状态文件。

--innodb-status-file选项仅供临时使用,因为输出生成会影响性能,并且 文件会随着时间的推移变得非常大。 innodb_status.pid

启用 InnoDB 表空间监视器

InnoDB要为定期输出 启用表空间监视器,请创建innodb_tablespace_monitor表:

CREATE TABLE innodb_tablespace_monitor (a INT) ENGINE=INNODB;

要禁用标准InnoDB表空间监视器,请删除表:

DROP TABLE innodb_tablespace_monitor;
笔记

表空间监视器已弃用;希望在未来的 MySQL 版本中将其删除。

启用 InnoDB 表监视器

InnoDB要为定期输出 启用表监视器,请创建innodb_table_monitor表:

CREATE TABLE innodb_table_monitor (a INT) ENGINE=INNODB;

要禁用InnoDB表监视器,请删除表:

DROP TABLE innodb_table_monitor;
笔记

表监视器已弃用;希望在未来的 MySQL 版本中将其删除。