26.4.2.1 sys_configtable

该 table 包含sys个架构配置选项,每个选项一行。通过更新此 table 进行的配置更改将在 Client 端会话中保持不变,并且服务器将重新启动。

sys_configtable 具有以下列:

  • variable

配置选项名称。

  • value

配置选项值。

  • set_time

该行的最新修改的时间戳。

  • set_by

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

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

例如,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()的后续调用 continue 使用用户定义的变量值(32),而不是使用存储在 table 中的值(64)。

要停止使用用户定义的变量并恢复使用 table 中的值,请在会话中将变量设置为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_configtable 中的选项与用户定义的变量之间刚刚描述的常规关系来进行临时配置更改,这些更改在会话结束时结束。但是,如果设置用户定义的变量然后在同一会话中更改相应的 table 值,则只要用户定义的变量存在非NULL值,就不会在该会话中使用更改后的 table 值。 (更改后的 table 值在未分配用户定义变量的其他会话中使用.)

下 table 描述了sys_configtable 中的选项以及相应的用户定义变量:

  • diagnostics.allow_i_s_tables , @sys.diagnostics.allow_i_s_tables

如果此选项为ON,则允许diagnostics()过程对INFORMATION_SCHEMA.TABLEStable 执行 table 扫描。如果有很多 table,这可能会很昂贵。默认值为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()过程调用)。如果选项值包含空格,则将其解释为查询。否则,它必须是查询 Performance Schema events_statements_summary_by_digesttable 的现有视图的名称。如果statement_performance_analyzer.limit配置选项大于 0,则查询或视图定义中不能有任何LIMIT子句。默认值为NULL(未定义自定义视图)。

  • statement_truncate_len , @sys.statement_truncate_len

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

可以将其他选项添加到sys_configtable 中。例如,diagnostics()execute_prepared_stmt()过程使用debug选项(如果存在),但是默认情况下该选项不是sys_configtable 的一部分,因为通常通过设置相应的@sys.debug用户定义变量来暂时仅启用调试输出。要启用调试输出而不必在单个会话中设置该变量,请将选项添加到 table 中:

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

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

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

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

mysql> SET @sys.debug = NULL;