对于使用 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–时间戳与时区问题,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/dtteaching/831688.html