问
在 MySQL 运行时,咱们调整零碎工夫,会造成什么影响么?
试验
按常规,咱们造个数据库:
在一个会话里,进行vsleep:
在 sleep 的同时,咱们将服务器的工夫向将来调整 10 秒:
咱们会发现,sleep 立即退出,只执行了0.82 秒:
咱们在业务中很少会用到 sleep,那么调整零碎工夫会有更大的影响么?咱们再来看看:
咱们在一个会话中,锁住一张表:
在另一个会话中, 咱们做如下几件事:
- 先打印一个工夫戳
- 调整 lock_wait_timeout
- 拜访 test.a 表
此时, 咱们调整零碎工夫, 向过来调整 10 秒:
过一会,等拜访 test.a 的申请超时了,咱们来查看输入:
咱们将两个工夫戳相减,算出这个锁继续了多久:
5375908 - 5375891 = 17 秒
由此咱们晓得:调整零碎工夫,会影响 MDL 的等待时间的计算
小贴士
此处咱们获取零碎工夫的办法有点奇怪,是从 /proc/timer_list 中获取, 而并非应用date之类的函数
次要起因是: 当零碎工夫被调整, date等命令的输入也会受到影响.
咱们想主观的评估 MySQL理论期待了多久, 除了手动掐秒表, 还能够利用 枯燥时钟 (monotonic clock) 来进行计算.
枯燥时钟 不会受到零碎工夫变动的影响, /proc/timer_list中的输入就是枯燥时钟的一种
除了以上的试验, 调整零碎工夫, 对正在运行的MySQL还会有其余影响, 比如说 半同步的等待时间计算、 延时复制的延时工夫计算 等等
咱们不倡议在 MySQL 运行时调整零碎工夫, 如需调整, 应及时重启 MySQL
思考题
本文中咱们测试了 MDL 的等待时间, 大家能够设计一个试验, 测试一下 InnoDB lock 的等待时间, 会发现很大的不同.
大家能够查阅材料, 来解释其中的不同.
对于 MySQL 的技术内容,你们还有什么想晓得的吗?连忙留言通知小编吧!