【MySQL】时区设置引发的卡顿
作者:田杰 查询执行时间长引发应用感知 “卡顿” 的场景在数据库的日常支持和使用中并不少见,但由于时区设置引发的 SQL 执行“卡顿”仍然是一个有趣的现象,之前没有具体关注过。 这次客户的细致与坚持让我们找到了问题的源头。 1. 名词解释 序列号 名词 说明 1 CPU 使用率 非空闲的 CPU 时间占比。 2 User CPU 使用率 用户空间(user-space)应用代码消耗的 CPU 时间占比。 3 Sys CPU 使用率 系统空间(sys-space)内核代码消耗 CPU 时间占比。 4 Futex Linux 内核提供的快速用户态锁/信号量;在无竞争场景完全在用户空间中运行,但在存在竞争场景会引发系统调用。 2. 问题现象 客户 MySQL 8.0 实例在 2020-03-19 22:03 ~ 22:04 出现大量活跃连接堆积,慢日志中出现大量低成本查询,并且 CPU 使用率不高但系统 SYS CPU 使用率出现异常波动。 3. 问题排查 3.1 OS 层面 我们来考虑一下有哪些因素可能会导致卡顿: • 物理机 OS 层面波动(通过 IO_WAIT 指标排除)。 • MySQL 自身机制。 3.2 MySQL 层面 排除掉 OS 层面异常类因素,我们开始聚焦在 mysqld 进程调用栈的分析。 为了更好的分析 MySQL 的行为,阿里数据库提供了扁鹊系统来跟踪