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
如果此选项为
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_configSET value = 'OFF'WHERE variable = 'debug';
其次,还要确保当前会话中的过程调用使用表中更改的值,请将相应的用户定义变量设置为NULL
:
mysql>SET @sys.debug = NULL;