文章目录

  • 一、sys_config表
  • 1、sys_config表的结构
  • 2、用户自定义配置选项变量
  • 3、sys_config表中配置选项简析
  • 二、sys_config_insert_set_user触发器和sys_config_update_set_user触发器


一、sys_config表

1、sys_config表的结构

sys_config表包含了sys系统库的配置选项,一行数据就是一个配置选项。sys_config是一个innodb表,是可持久化的。

sys_config表的结构如下。

sys guid函数使用 mysql mysql sys表_sys guid函数使用 mysql

variable:字段的名称
value:字段的值
set_time:修改时间
set_by:修改的用户

2、用户自定义配置选项变量

为了减少对sys_config表的直接读取次数,sys系统库中的视图和存储过程在需要使用这些配置选项时,首先会去查询用户自定义配置选项变量,变量的名字和sys_config表的variable字段的值一样,使用方式为@sys.variable,默认情况下用户自定义配置选项变量为NULL,会去sys_config表中读取,读取后会更新用户自定义变量的值,这也会导致不同会话中配置选项的值不同的问题。

  • statement_truncate_len配置选项会影响format_statement()函数格式化语句的最大长度。默认值为64。
  • 调用一次format_statement函数。发现@sys.statement_truncate_len变量的值被更新为64。
  • 修改用户自定义变量值为16,sys_config表中还是64,但是format_statement读取的是用户自定义的配置选项变量,原来的SQL语句格式化为了16位。

3、sys_config表中配置选项简析

variable

value

set_by

作用

diagnostics.allow_i_s_tables

OFF

NULL

如果此选项为ON,则diagnostics()存储过程在调用时会扫描INFORMATION_SCHEMA.TABLES表,找到所有的基表与STATISTICS表执行联结查询,扫描每个表的统计信息。

diagnostics.include_raw

OFF

NULL

如果此选项为ON,则在diagnostics()存储过程的输出信息中会包括metrics视图中的原始输出信息

ps_thread_trx_info.max_length

65535

NULL

ps_thread_trx_info()函数生成的JSON输出结果的最大长度。默认值为65535字节。

statement_performance_analyzer.limit

100

NULL

不具有内置限制的视图返回的最大行数。默认值为100

statement_performance_analyzer.view

NULL

NULL

statement_truncate_len

64

NULL

format_statement函数格式化语句最大长度

对sys_config表的insert和update操作会触发sys_config_insert_set_user触发器和sys_config_update_set_user触发器,这两个触发器的definer是sys@localhost

sys guid函数使用 mysql mysql sys表_数据库_02

二、sys_config_insert_set_user触发器和sys_config_update_set_user触发器

当对sys_config表执行insert操作添加配置选项时,sys_config_insert_set_user触发器会将该配置选项的setby字段设置为当前用户名。
当对sys_config表添加配置选项时,sys_config_update_set_user触发器会将该配置选项的setby字段设置为当前用户。

保证触发器生效的三个注意点

  • 这两个触发器的definer均为’mysql.sys’@‘localhost’,该用户在数据库安装时就被添加到了mysql.user表中,不要删除该用户,否则触发器无法执行。
  • 这两个触发器对sys_config表的默认权限只有select,而设置setby字段需要update权限,所以要为’mysql.sys’@'localhost’用户授权。
grant update,insert,select on sys.* to 'mysql.sys'@'localhost';
  • 有一个用户配置选项会控制触发器的开启状态。我们可以通过看触发器的内部实现了解。
    在触发器启动时会判断@sys.ignore_sys_config_triggers的值,只有这个值为0时触发器才会修改setby字段。默认情况下@sys.ignore_sys_config_triggers为NULL,所以需要我们手动修改。
    下面就是触发器成功启动的结果。