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_SCHEMA
table,该 table 从 MySQL 5.7.6 开始不推荐使用,并将在以后的 MySQL 版本中删除。
本节描述了从INFORMATION_SCHEMA
系统 table 和状态变量 table 到相应的“性能模式”table 的预期迁移路径。当INFORMATION_SCHEMA
table 被弃用并最终被删除时,应用程序开发人员应将此信息用作有关访问 MySQL 5.7.6 及更高版本中的系统变量和状态变量所需的更改的指导。
MySQL 5.6
在 MySQL 5.6 中,可从以下SHOW
语句获得系统和状态变量信息:
SHOW VARIABLES
SHOW STATUS
从这些INFORMATION_SCHEMA
table 中:
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_56为ON
时,启用与 MySQL 5.6 的兼容性。较旧的系统和状态变量源(SHOW
语句,INFORMATION_SCHEMA
table)具有与 MySQL 5.6 相同的语义。应用程序应按原样运行,而无需更改代码,并且应看到与 MySQL 5.6 中相同的变量名称和值。在以下情况下会出现警告:
-
从
INFORMATION_SCHEMA
table 中选择时,将引发弃用警告。 -
在 MySQL 5.7.6 和 5.7.7 中,将
WHERE
子句与SHOW
语句一起使用时会引发弃用警告。从 MySQL 5.7.8 开始不会发生此行为。
当show_compatibility_56为OFF
时,将禁用与 MySQL 5.6 的兼容性,并导致若干更改。必须对应用程序进行如下修改才能正常运行:
- 从
INFORMATION_SCHEMA
table 中进行选择会产生错误。访问INFORMATION_SCHEMA
table 的应用程序应该修改为使用相应的性能架构 table。
在 MySQL 5.7.9 之前的版本中,从INFORMATION_SCHEMA
table 中进行选择会产生一个空结果集以及弃用警告。对于show_compatibility_56=OFF而言,这还不足以 table 明需要迁移到相应的 Performance Schema 系统和状态变量 table。在 MySQL 5.7.9 及更高版本中产生错误,可以更明显地看出应用程序在需要修改的条件下以及问题所在的地方运行。
在 MySQL 5.7.6 和 5.7.7 中,Performance Schema session_variables和session_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 对从站状态变量的影响。
- 性能架构不会在状态变量 table 中收集
Com_xxx
状态变量的统计信息。若要获取全局和每个会话语句的执行计数,请分别使用events_statements_summary_global_by_event_name和events_statements_summary_by_thread_by_event_nametable。
迁移和特权
最初,随着 MySQL 5.7.6 中引入的 Performance Schema 系统 table 和状态变量 table,对这些 table 的访问需要SELECT特权,就像其他 Performance Schematable 一样。但是,这样做的结果是,当show_compatibility_56=OFF时,SHOW VARIABLES和SHOW STATUS语句也需要SELECT特权:在禁用兼容性的情况下,这些语句的输出来自 Performance Schema global_variables,session_variables,global_status和session_statustable。
从 MySQL 5.7.9 开始,那些 Performance Schematable 是世界可读的,并且没有SELECT特权就可以访问。因此,SHOW VARIABLES和SHOW 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,因为它不存在。