文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF(美制信函) - 39.9 MB
PDF(A4) - 40.0 MB
手册页(TGZ) - 258.5 KB
手册页(Zip) - 365.5 KB
信息(Gzip) - 4.0 MB
信息(Zip) - 4.0 MB


30.4.4.2 diagnostics() 过程

创建当前服务器状态的报告以用于诊断目的。

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

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

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

  • 来自其他相关 sys 模式视图的信息,例如确定第 95 个百分位数查询的视图

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

  • 复制状态(源和副本)

一些 sys 模式视图被计算为初始(可选)、总体和增量值

  • 初始视图是 diagnostics() 过程开始时视图的内容。此输出与用于增量视图的起始值相同。如果 diagnostics.include_raw 配置选项为 ON,则包含初始视图。

  • 总体视图是 diagnostics() 过程结束时视图的内容。此输出与用于增量视图的结束值相同。始终包含总体视图。

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

参数
  • 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:启用所有检测点和使用者。

    注意

    启用的检测点和使用者越多,对 MySQL 服务器性能的影响就越大。使用 medium 设置时要小心,尤其是在使用 full 设置时,因为这会对性能产生很大影响。

    使用 mediumfull 设置需要 SUPER 权限。

    如果选择了 current 以外的设置,则会在过程结束时恢复当前设置。

配置选项

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

  • debug@sys.debug

    如果此选项为 ON,则生成调试输出。默认值为 OFF

  • diagnostics.allow_i_s_tables@sys.diagnostics.allow_i_s_tables

    如果此选项设置为 ON,则 diagnostics() 过程允许对信息架构 TABLES 表执行表扫描。如果表很多,这可能会很耗时。默认值为 OFF

  • diagnostics.include_raw, @sys.diagnostics.include_raw

    如果此选项设置为 ON,则 diagnostics() 过程输出将包含查询 metrics 视图的原始输出。默认值为 OFF

  • statement_truncate_len, @sys.statement_truncate_len

    format_statement() 函数返回的语句的最大长度。超过此长度的语句将被截断。默认值为 64。

示例

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

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

要在 diagnostics() 过程运行时将其输出捕获到文件中,请使用 mysql 客户端的 tee 文件名notee 命令(请参阅 第 6.5.1.2 节“mysql 客户端命令”

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