可以看到 lock_mutex 的平均等待时间从 751267 增加到了 1399041。我们让自旋阶段增加了 10 倍,锁等待的时间也会随之增大。
目前的实验看上去自旋阶段越短越好,那么自旋阶段是不是就没有意义了?当然不会。
大家可以将 innodb_spin_wait_delay 设置为 1,再进行测试,随着自旋阶段的减少,锁等待的时间也会随之增大(大部分锁都使用了高成本的方式来进行等待)。
那么如何选择自旋的参数呢?我们建议“不出问题不瞎调”。
在之前的统计数据中,时间的单位是:cycle,根据以下换算表,锁的平均时间是 1399041 cycle,大概也就 0.5ms(1399041 / 2385353233 = 0.00058 s),占 SQL 的整体时间很低,可以不用瞎调。