10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册 本手册摘录

15.8.8配置旋转锁轮询

Innodb.互斥锁rw-locks通常只保留很短的间隔。在多核系统上,在线程休眠前的一段时间内不断检查它是否能够获得互斥锁或rw-lock会更有效率。如果互斥锁或rw-lock在此期间可用,线程可以立即在同一时间片中继续。但是,过于频繁地轮询共享对象(例如由多个线程轮询互斥锁或rw-lock)可能会导致这种情况缓存乒乓球,这会导致处理器使彼此的缓存部分失效。Innodb.通过强制轮询之间的随机延迟以取消轮询活动的同步化来最小化这个问题。随机延迟被实现为一个自旋等待循环。

自旋等待循环的持续时间由循环中发生的暂停指令的数量确定。该数字是通过随机选择从0到但不包括的整数而不是包括innodb_spin_wait_delay值,然后乘以50。(乘数值50是在MySQL 8.0.16之前硬编码的,之后可以配置。)例如,从以下范围中随机选择一个整数innodb_spin_wait_delay设置6:

{0,1,2,3,4,5}

所选整数乘以50,导致六个可能的暂停指令值中的一个:

{0, 50100150200250}

对于这组值,250是旋转等待循环中可能出现的PAUSE指令的最大数量。一个innodb_spin_wait_delay设置5会得到一组5个可能的值{0, 50100150200},其中200是暂停指令的最大数量,以此类推。这样,innodb_spin_wait_delay设置控制自旋锁轮询之间的最大延迟。

在所有处理器核心共享快速缓存内存的系统上,您可以通过设置减少最大延迟或禁用忙碌循环innodb_spin_wait_delay = 0.。在具有多个处理器芯片的系统上,缓存无效的效果可能更为重要,并且您可能会增加最大延迟。

在100MHz的奔腾时代,一个innodb_spin_wait_delay单位被校准相当于一个微秒。那个时间等价没有保持,但暂停指令持续时间在相对于其他CPU指令的处理器周期方面保持相当恒定,直到引入处理器的天窗生成,这具有相对较长的暂停指令。这innodb_spin_wait_pause_multiplier变量在MySQL 8.0.16中被引入,以提供一种方法来解释PAUSE指令持续时间的差异。

innodb_spin_wait_pause_multiplier变量控制暂停指令值的大小。例如,假设一个innodb_spin_wait_delay设置为6,减少innodb_spin_wait_pause_multiplier从50(默认和以前硬编码的值)到5生成一组更小的PAUSE指令值:

{0.5,10,15,20,25}

增加或减少暂停指令值的能力允许微调Innodb.适用于不同的处理器架构。例如,较小的PAUSE指令值适用于具有相对较长的PAUSE指令的处理器体系结构。

innodb_spin_wait_delayinnodb_spin_wait_pause_multiplier变量是动态的。它们可以在MySQL选项文件中指定,也可以在运行时使用集全球陈述。在运行时修改变量需要足以设置全局系统变量的权限。看第5.1.9.1节“系统变量权限”