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.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,则函数优先使用该变量的值,而不是从表中读取值。否则,函数从表中读取值,并将其设置为对应的用户定义变量,以便在同一会话中进一步引用该配置选项时不需要再次读取表。

例如,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 |
+----------------------------------------------------------+

或者,结束当前会话(使用户定义变量不再存在),然后开始新的会话。

上述关系可以被利用来实现临时配置更改,该更改将在会话结束时失效。但是,如果您在同一会话中设置了用户定义变量,然后更改了对应的表值,该更改的表值将不会在该会话中生效,直到用户定义变量不存在或为 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,则 诊断() 过程将包括从查询 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 视图具有内置限制,因为它仅返回执行时间在 95th 百分位的语句。)默认值为 100。

  • statement_performance_analyzer.view, @sys.statement_performance_analyzer.view

    statement_performance_analyzer() 过程使用的自定义查询或视图(该过程本身由 诊断() 过程调用)。如果选项值包含空格,则其被解释为查询。否则,它必须是现有的视图名称,该视图查询 Performance Schema events_statements_summary_by_digest 表。不能在查询或视图定义中包含 LIMIT 子句,如果 statement_performance_analyzer.limit 配置选项大于 0。默认值为 NULL(没有自定义视图定义)。

  • statement_truncate_len, @sys.statement_truncate_len

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

其他选项可以添加到 sys_config 表中。例如,诊断()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;