Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


30.4.2.1 sys_config 表

该表包含sys架构配置选项,每行一个选项。对该表进行的配置更改将在客户端会话和服务器重启之间保持。

sys_config表具有以下列:

  • variable

    配置选项名称。

  • value

    配置选项值。

  • set_time

    最近修改该行的时间戳。

  • set_by

    最近修改该行的账户。该值为NULL,如果该行自从安装sys架构以来未被修改。

为了提高效率,减少直接从sys_config表读取数据,sys架构函数在读取该表中的值时,首先检查当前会话中是否存在与该值对应的用户定义变量,如果存在,并且该变量的值不是NULL,那么该函数将使用该变量的值,而不是该表中的值。否则,该函数将从表中读取该值。在这种情况下,该函数通常还将对应的用户定义变量设置为该表中的值,以便在同一个会话中,后续对该配置选项的引用不需要再次读取表。

例如,statement_truncate_len选项控制format_statement()函数返回的语句的最大长度。默认值为64。要临时将值更改为32,以便在当前会话中,您可以设置对应的format_statement()函数的用户定义变量:

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()过程可以对信息SchemaTABLES表执行表扫描。如果有许多表,这可能会很耗时。默认情况下,该选项设置为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

    JSON输出的最大长度,生产ps_thread_trx_info()函数。默认情况下,该选项设置为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表的名称。不能在查询或视图定义中包含LIMIT子句,如果statement_performance_analyzer.limit配置选项大于0。默认情况下,NULL(没有自定义视图定义)。

  • statement_truncate_len, @sys.statement_truncate_len

    format_statement()函数返回的语句的最大长度。更长的语句将被截断到这个长度。默认情况下是64。

可以在sys_config表中添加其他选项。例如,diagnostics()execute_prepared_stmt()过程使用debug选项,但这不是sys_config表的一部分,因为debug输出通常只在临时设置对应的@sys.debug用户定义变量时启用。要在不需要在单个会话中设置该变量的情况下启用debug输出,可以将选项添加到表中:

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

要更改debug设置在表中,需要两步。首先,修改表中的值:

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

其次,在当前会话中确保过程调用使用从表中获取的更改值,设置对应的用户定义变量为NULL:

mysql> SET @sys.debug = NULL;