10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 36.3 mb
PDF (A4)- 36.3 mb
手册页(TGZ)- 236.9 kb
手册页(邮政编码)- 348.5 kb
信息(Gzip)- 3.4 mb
信息(邮政编码)- 3.4 mb
本手册节选

14.8.9配置旋转锁轮询

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

自旋等待循环的持续时间由循环中出现的PAUSE指令的数量决定。该数字是通过随机选择一个从0到但不包括的整数生成的innodb_spin_wait_delay值,并将该值乘以50。例如,从以下范围中随机选择一个整数innodb_spin_wait_delay设置6:

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

选择的整数乘以50,得到六个可能的PAUSE指令值之一:

{0, 50100150200250}

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

延迟循环的持续时间取决于C编译器和目标处理器。在100MHz的奔腾时代,一个innodb_spin_wait_delay单位被校准为相当于一微秒。这种时间等价性并不成立,但就处理器周期而言,PAUSE指令的持续时间相对于大多数处理器架构上的其他CPU指令保持相当恒定。

在所有处理器核心共享一个快速缓存内存的系统上,您可以通过设置来减少最大延迟或完全禁用忙循环innodb_spin_wait_delay = 0.在具有多个处理器芯片的系统上,缓存失效的影响可能更显著,您可能会增加最大延迟。

innodb_spin_wait_delay变量是动态的。可以在MySQL选项文件中指定它,也可以在运行时使用集全球声明。运行时修改需要足够的权限来设置全局系统变量。看到第5.1.8.1节“系统变量特权”