Documentation Home
MySQL 8.0 参考手册  / 第 27 章 MySQL 性能模式  /  25.20 迁移到性能模式系统和状态变量表

25.20 迁移到性能模式系统和状态变量表

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_SCHEMAMySQL 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_56ON较旧的系统和状态变量源(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_56OFF与 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_variablessession_status表没有完全反映当前会话有效的所有变量值;它们不包含没有会话对应项的全局变量行。这在 MySQL 5.7.8 中得到了纠正。

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

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

    • 在语句中使用WHERE子句 SHOW会产生错误。

  • 这些 状态变量通过以下方式变得不可用 : Slave_xxxSHOW STATUS

    Slave_heartbeat_period
    Slave_last_heartbeat
    Slave_received_heartbeats
    Slave_retried_transactions
    Slave_running

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

  • Performance Schema 不收集 状态变量表中状态变量的统计信息。要获取全局和每会话语句执行计数,请分别使用 和 表。 Com_xxxevents_statements_summary_global_by_event_nameevents_statements_summary_by_thread_by_event_name

迁移和特权

最初,随着 MySQL 5.7.6 中性能模式系统和状态变量表的引入,访问这些表需要SELECT特权,就像访问其他性能模式表一样。但是,这会导致 when show_compatibility_56=OFF、 the SHOW VARIABLESSHOW STATUSstatements 也需要SELECT特权:在禁用兼容性的情况下,这些语句的输出取自 Performance Schema global_variablessession_variablesglobal_statussession_status表。

从 MySQL 5.7.9 开始,这些 Performance Schema 表是全球可读的,无需 SELECT特权即可访问。因此 SHOW VARIABLESSHOW STATUSshow_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 ,因为它不存在。