该表包含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
如果此选项为ON,diagnostics()则允许该 过程在表上执行表扫描 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 表的现有视图的名称 。LIMIT如果statement_performance_analyzer.limit 配置选项大于0 ,则查询或视图定义中不能包含任何子句 。默认值为 NULL(未定义自定义视图)。
statement_truncate_len, @sys.statement_truncate_len
该format_statement()函数返回的语句的最大长度 。较长的语句将被截断为此长度。默认值为64。
可以将其他选项添加到 sys_config表中。例如,diagnostics()and execute_prepared_stmt() 过程使用该debug选项(如果存在),但是sys_config默认情况下该选项不是表的一部分, 因为通常通过设置相应的@sys.debug 用户定义变量仅临时启用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;