INFORMATION_SCHEMA
具有包含系统和状态变量信息
的表(请参阅第 24.3.11 节,“INFORMATIONSCHEMA GLOBAL_VARIABLES 和 SESSION_VARIABLES 表”,以及
第 24.3.10 节,“INFORMATIONSCHEMA GLOBAL_STATUS 和 SESSION_STATUS 表”)。性能模式还包含系统和状态变量表(请参阅第 25.12.13 节,“性能模式系统变量表”和第 25.12.14 节,“性能模式状态变量表”)。Performance Schema 表旨在替换从
INFORMATION_SCHEMA
MySQL 5.7.6 开始弃用并在 MySQL 8.0 中删除的表。
本节描述了从
INFORMATION_SCHEMA
系统和状态变量表到相应的性能模式表的预期迁移路径。应用程序开发人员应使用此信息作为有关在 MySQL 5.7.6 及更高版本中访问系统和状态变量所需的更改的指导,因为这些INFORMATION_SCHEMA
表已被弃用并最终被删除。
MySQL 5.6
在 MySQL 5.6 中,系统和状态变量信息可从以下SHOW
语句获得:
SHOW VARIABLES
SHOW STATUS
从这些INFORMATION_SCHEMA
表中:
INFORMATION_SCHEMA.GLOBAL_VARIABLES
INFORMATION_SCHEMA.SESSION_VARIABLES
INFORMATION_SCHEMA.GLOBAL_STATUS
INFORMATION_SCHEMA.SESSION_STATUS
MySQL 5.7
从 MySQL 5.7.6 开始,性能模式包括这些表作为系统和状态变量信息的新来源:
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
系统变量来控制服务器如何使系统和状态变量信息可用。
时,启用与 MySQL 5.6 的兼容性show_compatibility_56
。
ON
较旧的系统和状态变量源(SHOW
语句、
INFORMATION_SCHEMA
表)具有与 MySQL 5.6 相同的语义。应用程序应该按原样运行,没有代码更改,并且应该看到与 MySQL 5.6 中相同的变量名称和值。在这些情况下会出现警告:
从
INFORMATION_SCHEMA
表中选择时会引发弃用警告。WHERE
在 MySQL 5.7.6 和 5.7.7 中,在语句中使用子句 时会引发弃用警告SHOW
。从 MySQL 5.7.8 开始不会发生此行为。
当 时show_compatibility_56
,
OFF
与 MySQL 5.6 的兼容性被禁用,并导致一些变化。应用程序必须修改如下才能正常运行:
从
INFORMATION_SCHEMA
表中选择会产生错误。访问这些INFORMATION_SCHEMA
表的应用程序应该修改为使用相应的性能模式表。在 MySQL 5.7.9 之前,从
INFORMATION_SCHEMA
表中选择会产生空结果集和弃用警告。对于这种情况,这不足以表明需要迁移到相应的性能模式系统和状态变量表show_compatibility_56=OFF
。在 MySQL 5.7.9 及更高版本中产生错误可以更明显地表明应用程序在需要修改的条件下运行,以及问题所在。在 MySQL 5.7.6 和 5.7.7 中,Performance Schema
session_variables
和session_status
表没有完全反映当前会话有效的所有变量值;它们不包含没有会话对应项的全局变量行。这在 MySQL 5.7.8 中得到了纠正。语句的输出
SHOW
是使用底层性能模式表生成的。使用这些语句编写的应用程序仍然可以使用它们,但最好使用 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
应修改使用这些状态变量的应用程序以使用与复制相关的性能模式表来获取此信息。有关详细信息,请参阅 show_compatibility_56 对从站状态变量的影响。
Performance Schema 不收集 状态变量表中状态变量的统计信息。要获取全局和每会话语句执行计数,请分别使用 和 表。
Com_
xxx
events_statements_summary_global_by_event_name
events_statements_summary_by_thread_by_event_name
迁移和特权
最初,随着 MySQL 5.7.6 中性能模式系统和状态变量表的引入,访问这些表需要SELECT
特权,就像访问其他性能模式表一样。但是,这会导致 when
show_compatibility_56=OFF
、 the
SHOW VARIABLES
和
SHOW STATUS
statements 也需要SELECT
特权:在禁用兼容性的情况下,这些语句的输出取自 Performance Schema
global_variables
、
session_variables
、
global_status
和
session_status
表。
从 MySQL 5.7.9 开始,这些 Performance Schema 表是全球可读的,无需
SELECT
特权即可访问。因此
SHOW VARIABLES
,
SHOW STATUS
当
show_compatibility_56=OFF
.
超越 MySQL 5.7
在 MySQL 8.0 中,INFORMATION_SCHEMA
变量表和
show_compatibility_56
系统变量被删除,SHOW
语句的输出始终基于底层的 Performance Schema 表。
已修改为在 MySQL 5.7 中工作的应用程序
show_compatibility_56=OFF
无需进一步更改即可工作,除了无法测试或设置show_compatibility_56
,因为它不存在。