MySQL--时间戳与时区问题
程序员文章站
2022-05-17 16:13:53
对于使用 timestamp 的场景,MySQL 在访问 timestamp 字段时会做时区转换,当 time_zone 设置为 system 时,MySQL 访问每一行的 timestamp 字段时,都会通过 libc 的时区函数,获取 Linux 设置的时区,在这个函数中会持有mutex,当大量 ......
对于使用 timestamp 的场景,mysql 在访问 timestamp 字段时会做时区转换,当 time_zone 设置为 system 时,mysql 访问每一行的 timestamp 字段时,都会通过 libc 的时区函数,获取 linux 设置的时区,在这个函数中会持有mutex,当大量并发sql需要访问 timestamp 字段时,会出现 mutex 竞争。
mysql 访问每一行都会做这个时区转换,转换完后释放mutex,所有等待这个 mutex 的线程全部唤醒,结果又只有一个线程会成功持有 mutex,其余又会再次sleep,这样就会导致 context switch 非常高但 qps 很低,系统吞吐量急剧下降。
解决办法:设置time_zone=’+8:00’,这样就不会访问 linux 系统时区,直接转换,避免了mutex问题。
参考链接:
https://blog.csdn.net/shaochenshuo/article/details/51881501
上一篇: MySQL实现按天统计数据的方法