此表包含 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()
过程对信息模式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;