28.4.2.1 sys_config 表

此表包含sys模式配置选项,每个选项一行。通过更新此表所做的配置更改在客户端会话和服务器重新启动时持续存在。

sys_config表有以下列:

  • variable

    配置选项名称。

  • value

    配置选项值。

  • set_time

    最近修改行的时间戳。

  • set_by

    对行进行最新修改的帐户。该值是自架构安装 NULL以来该行是否未更改 。sys

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

    如果此选项为ONdiagnostics()则允许该过程对 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 否则,它必须是查询性能模式表的现有视图的名称 。 如果配置选项大于 0, 则查询或视图定义中不能有任何LIMIT子句 。默认值为(未定义自定义视图)。 statement_performance_analyzer.limitNULL

  • 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;