25.20 迁移到性能架构系统和状态变量 table

INFORMATION_SCHEMA的 table 包含系统和状态变量信息(请参阅第 24.11 节,“ INFORMATION_SCHEMA GLOBAL_VARIABLES 和 SESSION_VARIABLEStable”第 24.10 节,“ INFORMATION_SCHEMA GLOBAL_STATUS 和 SESSION_STATUStable”)。性能模式还包含系统和状态变量 table(请参见第 25.12.13 节,“性能架构系统变量 table”第 25.12.14 节,“性能模式状态变量 table”)。 Performance Schematable 用于替换INFORMATION_SCHEMAtable,该 table 从 MySQL 5.7.6 开始不推荐使用,并将在以后的 MySQL 版本中删除。

本节描述了从INFORMATION_SCHEMA系统 table 和状态变量 table 到相应的“性能模式”table 的预期迁移路径。当INFORMATION_SCHEMAtable 被弃用并最终被删除时,应用程序开发人员应将此信息用作有关访问 MySQL 5.7.6 及更高版本中的系统变量和状态变量所需的更改的指导。

MySQL 5.6

在 MySQL 5.6 中,可从以下SHOW语句获得系统和状态变量信息:

SHOW VARIABLES
SHOW STATUS

从这些INFORMATION_SCHEMAtable 中:

INFORMATION_SCHEMA.GLOBAL_VARIABLES
INFORMATION_SCHEMA.SESSION_VARIABLES

INFORMATION_SCHEMA.GLOBAL_STATUS
INFORMATION_SCHEMA.SESSION_STATUS

MySQL 5.7

从 MySQL 5.7.6 开始,性能模式将这些 table 作为系统和状态变量信息的新来源:

performance_schema.global_variables
performance_schema.session_variables
performance_schema.variables_by_thread

performance_schema.global_status
performance_schema.session_status
performance_schema.status_by_thread
performance_schema.status_by_account
performance_schema.status_by_host
performance_schema.status_by_user

MySQL 5.7.6 还添加了一个show_compatibility_56系统变量来控制服务器如何使系统和状态变量信息可用。

show_compatibility_56ON时,启用与 MySQL 5.6 的兼容性。较旧的系统和状态变量源(SHOW语句,INFORMATION_SCHEMAtable)具有与 MySQL 5.6 相同的语义。应用程序应按原样运行,而无需更改代码,并且应看到与 MySQL 5.6 中相同的变量名称和值。在以下情况下会出现警告:

  • INFORMATION_SCHEMAtable 中选择时,将引发弃用警告。

  • 在 MySQL 5.7.6 和 5.7.7 中,将WHERE子句与SHOW语句一起使用时会引发弃用警告。从 MySQL 5.7.8 开始不会发生此行为。

show_compatibility_56OFF时,将禁用与 MySQL 5.6 的兼容性,并导致若干更改。必须对应用程序进行如下修改才能正常运行:

  • INFORMATION_SCHEMAtable 中进行选择会产生错误。访问INFORMATION_SCHEMAtable 的应用程序应该修改为使用相应的性能架构 table。

在 MySQL 5.7.9 之前的版本中,从INFORMATION_SCHEMAtable 中进行选择会产生一个空结果集以及弃用警告。对于show_compatibility_56=OFF而言,这还不足以 table 明需要迁移到相应的 Performance Schema 系统和状态变量 table。在 MySQL 5.7.9 及更高版本中产生错误,可以更明显地看出应用程序在需要修改的条件下以及问题所在的地方运行。

在 MySQL 5.7.6 和 5.7.7 中,Performance Schema session_variablessession_statustable 不能完全反映当前会话有效的所有变量值。它们不包含没有会话对应项的全局变量的行。这在 MySQL 5.7.8 中已得到纠正。

  • SHOW语句的输出是使用基础性能模式 table 生成的。使用这些语句编写的应用程序仍然可以使用它们,但是最好使用 MySQL 5.7.8 或更高版本。在 MySQL 5.7.6 和 5.7.7 中,结果可能有所不同:

  • SHOW [SESSION] VARIABLES输出不包含没有会话对应项的全局变量。

    • WHERE子句与SHOW语句一起使用会产生错误。
  • 这些Slave_xxx状态变量无法通过SHOW STATUS使用:

Slave_heartbeat_period
Slave_last_heartbeat
Slave_received_heartbeats
Slave_retried_transactions
Slave_running

应该修改使用这些状态变量的应用程序,以使用与复制相关的性能架构 table 来获取此信息。有关详细信息,请参见show_compatibility_56 对从站状态变量的影响

迁移和特权

最初,随着 MySQL 5.7.6 中引入的 Performance Schema 系统 table 和状态变量 table,对这些 table 的访问需要SELECT特权,就像其他 Performance Schematable 一样。但是,这样做的结果是,当show_compatibility_56=OFF时,SHOW VARIABLESSHOW STATUS语句也需要SELECT特权:在禁用兼容性的情况下,这些语句的输出来自 Performance Schema global_variablessession_variablesglobal_statussession_statustable。

从 MySQL 5.7.9 开始,那些 Performance Schematable 是世界可读的,并且没有SELECT特权就可以访问。因此,SHOW VARIABLESSHOW STATUS不需要基础性能模式 table 的特权,当show_compatibility_56=OFF时,将根据这些 table 生成其输出。

超越 MySQL 5.7

在 MySQL 8.0 中,删除了INFORMATION_SCHEMA变量 table 和show_compatibility_56系统变量,并且SHOW语句的输出始终基于基础性能模式 table。

修改为在show_compatibility_56=OFF时可在 MySQL 5.7 中运行的应用程序应无需进行进一步更改即可运行,除了将无法测试或设置show_compatibility_56,因为它不存在。