MySQL show full processlist 以及group_concat_max_len参数设置

查询Mysql当前正在运行的SQL语句:
show full processlist或者show processlist

结果都是从information_schema.processlist表取的结果,所以也可以主直接查询该表
select info from information_schema.processlist;

但是如果 info 字段值(SQL语句)长度字节超过1024 则会被截断。

mysql> show variables like 'group_concat_max_len' ;--默认长度为1024
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| group_concat_max_len | 1024 |
+----------------------+-------+

mysql> SELECT @@global.group_concat_max_len;
+-------------------------------+
| @@global.group_concat_max_len |
+-------------------------------+
| 1024 |
+-------------------------------+

临时解决办法:
如果是生产环境下,不能擅自重启MySQL服务,则可以通过语句设置group_concat的作用范围,如:
SET GLOBAL group_concat_max_len=-1;
或者
SET SESSION group_concat_max_len=-1;

(-1为最大值或根据实际需求设置长度)。
之后再执行show full processlist,就可以看到完整的info字段值了。

mysql> SET SESSION group_concat_max_len=-1;---奇怪,按照该方法设置Session和Global的group_concat_max_len为-1之后,查看结果变为4。
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show variables like "%len";
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| ft_max_word_len | 84 |
| ft_min_word_len | 4 |
| group_concat_max_len | 4 |
+----------------------+-------+
3 rows in set (0.00 sec)


show processlist时,info字段同样被截断。所以,上面的设置没有生效。

重新设置为group_concat_max_len=20480;

mysql> SET SESSION group_concat_max_len=20480;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like "%len";
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| ft_max_word_len | 84 |
| ft_min_word_len | 4 |
| group_concat_max_len | 20480 |
+----------------------+-------+
3 rows in set (0.00 sec)

mysql>

之后再执行showshow processlist时,info字段没有被截断,设置生效。

但是,该设置只对当前会话生效,我们可以在mysql的配置文件my.cnf配置文件中,新增加如下内容:
group_concat_max_len=20480

需要重启mysqld服务才生效。

 

posted on 2020-07-15 14:11  遠離塵世の方舟  阅读(405)  评论(0编辑  收藏  举报

导航