我们提供安全,免费的手游软件下载!
在 MySQL 中,如果我们想查看实例当前正在执行的 SQL,常用的命令是
SHOW PROCESSLIST
。
但如果 SQL 过长的话,就会被截断。这时,我们一般会用
SHOW FULL PROCESSLIST
来查看完整的 SQL。
最近碰到一个 case,发现无论是使用
SHOW PROCESSLIST
、
SHOW FULL PROCESSLIST
,还是 performance_schema.processlist 都无法获取完整的 SQL,反倒 information_schema.processlist 可以。
最后发现,
SHOW FULL PROCESSLIST
无法查看完整的 SQL 竟然与 performance_schema_show_processlist 参数有关。
SHOW PROCESSLIST
默认是从线程管理器(Global_THD_manager)中获取线程信息。
这种实现方式会持有全局互斥锁。在负载高的场景,会对数据库的性能有一定的负面影响。
所以一般都推荐使用 performance_schema.processlist,这种方式不会持有全局锁。
在 MySQL 8.0.22 中,引入了 performance_schema_show_processlist 参数,可设置
SHOW PROCESSLIST
的实现方式。
当该参数设置为 ON 时,会使用 performance_schema.processlist 的实现方式。
当参数设置为 OFF(默认值) 时,会使用传统的实现方式。
下面我们看看 SHOW PROCESSLIST, information_schema.processlist, performance_schema.processlist 这三种不同的查询方式对 SQL 的长度限制。
因为 SQL 是在 INFO 列中存储的,所以,SQL 的最大长度实际上是由 INFO 列决定的。
热门资讯