Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

30.4.4.2 诊断程序(diagnostics())

创建服务器状态报告,以便进行诊断。

该过程在执行期间通过操纵会话值来禁用二进制日志记录sql_log_bin系统变量。这是一个受限操作,因此该过程需要足够的权限来设置受限会话变量。请参阅第 7.1.9.1 节,“系统变量权限”

diagnostics() 收集的数据包括以下信息:

  • 来自 metrics 视图的信息(请参阅第 30.4.3.21 节,“metrics 视图”

  • 来自其他相关 sys 架构视图的信息,例如确定查询的 95th 百分位数的视图

  • 如果 MySQL 服务器是 NDB 集群的一部分,则来自 ndbinfo 架构的信息

  • 复制状态(源和副本)

一些 sys 架构视图被计算为初始、总体和 delta 值:

  • 初始视图是 diagnostics() 过程开始时的视图内容。这与用于 delta 视图的开始值相同。如果 diagnostics.include_raw 配置选项为 ON,则包括初始视图。

  • 总体视图是 diagnostics() 过程结束时的视图内容。这与用于 delta 视图的结束值相同。总体视图始终包括。

  • delta 视图是从开始到结束的过程执行期间的差异。最小值和最大值分别是结束视图中的最小值和最大值,不一定反映监控期间的最小值和最大值。除了 metrics 视图外,delta 只计算第一次和最后一次输出之间的差异。

参数
  • in_max_runtime INT UNSIGNED:数据收集的最大时间(秒)。使用 NULL 收集默认的 60 秒数据。否则,使用大于 0 的值。

  • in_interval INT UNSIGNED:数据收集之间的睡眠时间(秒)。使用 NULL 睡眠默认的 30 秒。否则,使用大于 0 的值。

  • in_auto_config ENUM('current', 'medium', 'full'):要使用的性能架构配置。允许的值为:

    • current:使用当前仪器和消费者设置。

    • medium:启用一些仪器和消费者。

    • full:启用所有仪器和消费者。

    Note

    启用越多的仪器和消费者,对 MySQL 服务器性能的影响越大。请小心使用 medium 设置,特别是 full 设置,它对性能的影响很大。

    使用 mediumfull 设置需要 SUPER 权限。

    如果选择了其他设置,而不是 current,那么在过程结束时将恢复当前设置。

配置选项

diagnostics() 操作可以使用以下配置选项或相应的用户定义变量进行修改(请参阅第 30.4.2.1 节,“sys_config 表”):

  • debug, @sys.debug

    如果启用此选项,将生成调试输出。默认情况下为 OFF

  • diagnostics.allow_i_s_tables, @sys.diagnostics.allow_i_s_tables

    如果启用此选项,诊断()过程将被允许在信息架构 TABLES 表上执行表扫描。这可能会很昂贵,如果有很多表。默认情况下为 OFF

  • diagnostics.include_raw, @sys.diagnostics.include_raw

    如果启用此选项,诊断()过程的输出将包括从查询 metrics 视图的原始输出。默认情况下为 OFF

  • statement_truncate_len, @sys.statement_truncate_len

    format_statement() 函数返回的语句的最大长度。长于此长度的语句将被截断为此长度。默认情况下为 64。

示例

使用当前性能架构设置创建诊断报告,每 30 秒启动一次迭代,运行最多 120 秒:

mysql> CALL sys.diagnostics(120, 30, 'current');

要捕获 诊断() 过程的输出到文件中,可以使用 mysql 客户端 tee filenamenotee 命令(见 第 6.5.1.2 节,“mysql 客户端命令”):

mysql> tee diag.out;
mysql> CALL sys.diagnostics(120, 30, 'current');
mysql> notee;