文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


30.4.2.1 sys_config 表

此表包含 sys 模式配置选项,每个选项一行。通过更新此表进行的配置更改将在客户端会话和服务器重启之间保留。

sys_config 表包含以下列

  • variable

    配置选项名称。

  • value

    配置选项值。

  • set_time

    最近一次修改行的日期时间戳。

  • set_by

    对行进行最近一次修改的帐户。如果该行自 sys 模式安装以来未更改,则该值为 NULL

作为一项效率措施,以最大程度地减少从 sys_config 表进行的直接读取次数,使用此表中值的 sys 模式函数会检查具有相应名称的用户定义变量,该用户定义变量具有与该名称相同的名称以及 @sys. 前缀。(例如,与 diagnostics.include_raw 选项对应的变量是 @sys.diagnostics.include_raw。)如果用户定义的变量在当前会话中存在且不为 NULL,则该函数优先使用其值,而不是使用 sys_config 表中的值。否则,该函数将从表中读取并使用该值。在后一种情况下,调用函数通常还会将相应的用户定义变量设置为表值,以便同一会话中对配置选项的进一步引用使用该变量,而无需再次读取该表。

例如,statement_truncate_len 选项控制由 format_statement() 函数返回的语句的最大长度。默认值为 64。要暂时将您的当前会话的值更改为 32,请设置相应的 @sys.statement_truncate_len 用户定义变量

mysql> SET @stmt = 'SELECT variable, value, set_time, set_by FROM sys_config';
mysql> SELECT sys.format_statement(@stmt);
+----------------------------------------------------------+
| sys.format_statement(@stmt)                              |
+----------------------------------------------------------+
| SELECT variable, value, set_time, set_by FROM sys_config |
+----------------------------------------------------------+
mysql> SET @sys.statement_truncate_len = 32;
mysql> SELECT sys.format_statement(@stmt);
+-----------------------------------+
| sys.format_statement(@stmt)       |
+-----------------------------------+
| SELECT variabl ... ROM sys_config |
+-----------------------------------+

会话中 format_statement() 的后续调用将继续使用用户定义的变量值 (32),而不是表中存储的值 (64)。

要停止使用用户定义的变量并恢复使用表中的值,请在您的会话中将该变量设置为 NULL

mysql> SET @sys.statement_truncate_len = NULL;
mysql> SELECT sys.format_statement(@stmt);
+----------------------------------------------------------+
| sys.format_statement(@stmt)                              |
+----------------------------------------------------------+
| SELECT variable, value, set_time, set_by FROM sys_config |
+----------------------------------------------------------+

或者,结束您的当前会话(导致用户定义的变量不再存在)并开始一个新的会话。

前面描述的 sys_config 表中的选项和用户定义变量之间的常规关系可用于进行临时配置更改,这些更改在您的会话结束时结束。但是,如果您设置了用户定义的变量,然后在同一会话中随后更改了相应的表值,则只要用户定义的变量存在且其值为非 NULL,则在该会话中不会使用更改后的表值。(更改后的表值 在用户定义的变量未分配的其他会话中使用。)

以下列表描述了 sys_config 表中的选项和相应的用户定义变量

  • diagnostics.allow_i_s_tables@sys.diagnostics.allow_i_s_tables

    如果此选项为 ON,则允许 diagnostics() 过程对 Information Schema TABLES 表执行表扫描。如果存在大量表,这可能很昂贵。默认值为 OFF

  • diagnostics.include_raw@sys.diagnostics.include_raw

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

  • ps_thread_trx_info.max_length, @sys.ps_thread_trx_info.max_length

    ps_thread_trx_info() 函数产生的 JSON 输出的最大长度。默认值为 65535。

  • statement_performance_analyzer.limit, @sys.statement_performance_analyzer.limit

    对于没有内置限制的视图,返回的最大行数。(例如,statements_with_runtimes_in_95th_percentile 视图具有内置限制,因为它只返回平均执行时间位于第 95 个百分位的语句。)默认值为 100。

  • statement_performance_analyzer.view, @sys.statement_performance_analyzer.view

    statement_performance_analyzer() 过程(本身由 diagnostics() 过程调用)使用的自定义查询或视图。如果选项值包含空格,则解释为查询。否则,它必须是查询性能模式 events_statements_summary_by_digest 表的现有视图的名称。如果 statement_performance_analyzer.limit 配置选项大于 0,则查询或视图定义中不能有任何 LIMIT 子句。默认值为 NULL(未定义自定义视图)。

  • statement_truncate_len, @sys.statement_truncate_len

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

其他选项可以添加到 sys_config 表中。例如,diagnostics()execute_prepared_stmt() 过程使用 debug 选项(如果存在),但此选项默认情况下不属于 sys_config 表,因为调试输出通常只在临时启用,方法是设置相应的 @sys.debug 用户定义变量。要启用调试输出,而无需在各个会话中设置该变量,请将该选项添加到该表中

mysql> INSERT INTO sys.sys_config (variable, value) VALUES('debug', 'ON');

要在表中更改调试设置,请执行以下两项操作。首先,修改表本身中的值

mysql> UPDATE sys.sys_config
       SET value = 'OFF'
       WHERE variable = 'debug';

其次,还要确保当前会话内的过程调用使用来自该表的更改后的值,请将相应的用户定义变量设置为 NULL

mysql> SET @sys.debug = NULL;