实验

在一个会话里,进行 sleep :

在 sleep 的同时,我们将服务器的时间向未来调整 10 秒:

我们会发现,sleep 立刻退出,只执行了0.82 秒:

我们在业务中很少会用到 sleep,那么调整系统时间会有更大的影响么?我们再来看看:
我们在一个会话中,锁住一张表:

先打印一个时间戳 调整 lock_wait_timeout 访问 test.a 表


过一会,等访问 test.a 的请求超时了,我们来查看输出:

我们将两个时间戳相减,算出这个锁持续了多久:
5375908 - 5375891 = 17 秒
小贴士
此处我们获取系统时间的方法有点奇怪,是从 proc/timer_list 中获取,而并非使用 date 之类的函数
主要原因是:当系统时间被调整,date 等命令的输出也会受到影响。
我们想客观的评估 MySQL 实际等待了多久,除了手动掐秒表,还可以利用单调时钟 ( monotonic clock ) 来进行计算。
单调时钟不会受到系统时间变化的影响,/proc/timer_list 中的输出就是单调时钟的一种
思考题
相关推荐:
文章至此。

以下是个人微信公众号,欢迎关注:

近期热文
你可能也会对以下话题感兴趣。点击链接便可查看。
文章转载自戏说数据那点事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




