在上一篇《初相识 | 全方位认识 sys 系统库》中,我们针对sys 系统库做了一个不痛不痒的开端,是不是觉得太简单了?别急,本期我们将为大家带来系列第二篇《配置表|全方位认识 sys 系统库》,让你一次性重新找回学习performance_schema时的感觉,下面请跟随我们一起开始 sys 系统库的系统学习之旅吧。
| sys 系统库配置
1. sys_config表
该表包含sys系统库的配置选项,每个配置选项一行记录。该表是innodb表,可以通过客户端更新此表来持久化配置,server重启不会丢失。
sys_config表字段含义如下:
-
variable:配置选项名称
-
value:配置选项值
-
set_time:该行配置最近修改时间
-
set_by:最近一次对改行配置进行修改的帐户名。如果自server安装sys 系统库以来,该行配置从未被更改过,则该列值为NULL
为了减少对sys_config表直接读取的次数,sys 系统库中的视图、存储过程在需要使用到这些配置选项时,会优先检查这些配置选项对应的用户自定义配置选项变量(用户自定义配置选项变量与该表中的配置选项都具有相同的名称,例如:表中的diagnostics.include_raw选项,对应的自定义配置选项变量是@sys.diagnostics.include_raw)。如果用户定义的配置选项变量存在于当前会话作用域中并且是非空的,那么sys 系统库中的函数、存储过程将优先使用该配置选项变量值。否则,该sys 系统库函数和存储过程将使用sys_config表中的配置选项值(从表中读取配置选项值之后,会将sys_config表中的配置选项时同时更新到用户自定义配置选项变量中,以便在同一会话后续对该值的引用时使用变量值,而不必再次从sys_config表中读取),示例:statement_truncate_len配置选项控制format_statement()函数返回的语句的最大长度。默认值为64.如果要临时将当前会话的值更改为32,可以设置对应的@sys.statement_truncate_len用户定义的配置选项变量:
# statement_truncate_len配置选项默认是64,直接调用format_statement()函数返回是64字节长度,在未调用任何涉及到该配置选项的函数之前,该自定义变量值为NULL,此时函数需要从表中查询默认值
admin@localhost : sys 11:47:37> select @sys.statement_truncate_len;
+-----------------------------+
| @sys.statement_truncate_len |
+-----------------------------+
| NULL |
+-----------------------------+
1 row in set (0.00 sec)
admin@localhost : sys 11:51:53> SET @stmt = 'SELECT variable, value, set_time, set_by FROM sys_config';
Query OK, 0 rows affected (0.00 sec)
admin@localhost : sys 11:52:04> SELECT format_statement(@stmt);
+----------------------------------------------------------+
| format_statement(@stmt) |
+----------------------------------------------------------+
| SELECT variab