### 15.17.2 启用 InnoDB 监视器

[](<>)[](<>)

什么时候`InnoDB`监视器启用定期输出，`InnoDB`将输出写入[**mysqld**](mysqld.html)服务器标准错误输出（`标准错误`) 大约每 15 秒一次。

`InnoDB`将监视器输出发送到`标准错误`而不是`标准输出`或固定大小的内存缓冲区，以避免潜在的缓冲区溢出。

在 Windows 上，`标准错误`除非另有配置，否则将定向到默认日志文件。如果要将输出定向到控制台窗口而不是错误日志，请从控制台窗口中的命令提示符启动服务器，并使用[`- 安慰`](server-options.html#option_mysqld_console)选项。有关详细信息，请参阅[Windows 上的默认错误日志目标](error-log-destination-configuration.html#error-log-destination-configuration-windows).

在 Unix 和类 Unix 系统上，`标准错误`除非另有配置，否则通常指向终端。有关详细信息，请参阅[Unix 和类 Unix 系统上的默认错误日志目标](error-log-destination-configuration.html#error-log-destination-configuration-unix).

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

笔记

为了帮助排除故障，`InnoDB`暂时启用标准`InnoDB`在特定条件下监控输出。有关详细信息，请参阅[第 15.21 节，“InnoDB 故障排除”](innodb-troubleshooting.html).

`InnoDB`监视器输出以包含时间戳和监视器名称的标头开头。例如：

```
=====================================
2014-10-16 18:37:29 0x7fc2a95c1700 INNODB MONITOR OUTPUT
=====================================
```

标准的标题`InnoDB`监视器 （`INNODB 监控输出`) 也用于锁定监视器，因为后者通过添加额外的锁定信息产生相同的输出。

这[`innodb_status_output`](innodb-parameters.html#sysvar_innodb_status_output)和[`innodb_status_output_locks`](innodb-parameters.html#sysvar_innodb_status_output_locks)系统变量用于启用标准`InnoDB`监控和`InnoDB`锁定监视器。

这[`过程`](privileges-provided.html#priv_process)需要权限才能启用或禁用`InnoDB`监视器。

#### 启用标准 InnoDB 监视器

启用标准`InnoDB`通过设置监控[`innodb_status_output`](innodb-parameters.html#sysvar_innodb_status_output)系统变量为`在`.

```
SET GLOBAL innodb_status_output=ON;
```

禁用标准`InnoDB`监控，设置[`innodb_status_output`](innodb-parameters.html#sysvar_innodb_status_output)到`离开`.

当你关闭服务器时，[`innodb_status_output`](innodb-parameters.html#sysvar_innodb_status_output)变量设置为默认值`离开`价值。

#### 启用 InnoDB 锁定监视器

`InnoDB`Lock Monitor 数据使用`InnoDB`标准监视器输出。这俩`InnoDB`标准监视器和`InnoDB`必须启用锁定监视器才能拥有`InnoDB`定期打印锁定监视器数据。

要启用`InnoDB`锁定监视器，设置[`innodb_status_output_locks`](innodb-parameters.html#sysvar_innodb_status_output_locks)系统变量为`在`.这俩`InnoDB`标准监视器和`InnoDB`必须启用锁定监视器才能拥有`InnoDB`定期打印的锁定监视器数据：

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

要禁用`InnoDB`锁定监视器，设置[`innodb_status_output_locks`](innodb-parameters.html#sysvar_innodb_status_output_locks)到`离开`.放[`innodb_status_output`](innodb-parameters.html#sysvar_innodb_status_output)到`离开`也禁用`InnoDB`标准监视器。

当你关闭服务器时，[`innodb_status_output`](innodb-parameters.html#sysvar_innodb_status_output)和[`innodb_status_output_locks`](innodb-parameters.html#sysvar_innodb_status_output_locks)变量设置为默认值`离开`价值。

笔记

要启用`InnoDB`锁定监视器[`显示引擎 INNODB 状态`](show-engine.html)输出，您只需要启用[`innodb_status_output_locks`](innodb-parameters.html#sysvar_innodb_status_output_locks).

#### 按需获取标准 InnoDB 监视器输出

作为启用标准的替代方案`InnoDB`监控周期输出，可获取标准`InnoDB`使用[`显示引擎 INNODB 状态`](show-engine.html)SQL 语句，它将输出获取到您的客户端程序。如果您正在使用[**mysql**](mysql.html)交互式客户端，如果将通常的分号语句终止符替换为`\G`：

```
mysql> SHOW ENGINE INNODB STATUS\G
```

[`显示引擎 INNODB 状态`](show-engine.html)输出还包括`InnoDB`锁定监视器数据，如果`InnoDB`锁定监视器已启用。

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

标准`InnoDB`通过指定`--innodb-状态文件`启动时的选项。使用此选项时，`InnoDB`创建一个名为`innodb_status.*`pid`*`在数据目录中，大约每 15 秒将输出写入它。

`InnoDB`当服务器正常关闭时删除状态文件。如果出现异常关机，可能需要手动删除状态文件。

这`--innodb-状态文件`选项用于临时使用，因为输出生成会影响性能，并且`innodb_status.*`pid`*`随着时间的推移，文件可能会变得非常大。
