技术分享 | mysql show processlist Time 为负数的思考
作者:高鹏 文章末尾有他著作的《深入理解 MySQL 主从原理 32 讲》,深入透彻理解 MySQL 主从,GTID 相关技术知识。 一、问题来源 这是一个朋友问我的一个问题,问题如下,在 MTS 中 Worker 线程看到 Time 为负数是怎么回事,如下: 二、关于 show processlist 中的 Time 实际上 show processlist 中的信息基本都来自函数 mysqld_list_processes ,也就是说每次执行 show processlist 都需要执行这个函数来进行填充。对于 Time 值来讲它来自如下信息: Percona: time_t now= my_time(0); protocol->store_long ((thd_info->start_time > now) ? 0 : (longlong) (now - thd_info->start_time)); 官方版: time_t now= my_time(0); protocol->store_long ((longlong) (now - thd_info->start_time)); 我们可以注意到在 Percona 的版本中对这个输出值做了优化,也就是如果出现负数的时候直接显示为 0,但是官方版中没有这样做,可能出现负数。 三、计算方式解读和测试