MySQL 配置自旋锁轮询

配置自旋锁轮询
很多InnoDB的互斥锁和rw-lock会被预留一段时间。在多核系统上,线程在睡觉前持续检查它是否可以获得互斥锁或rw-lock,这样会更有效率。如果互斥锁或rw-lock在此轮询期间可用,线程可以立即在同一时间片中继续运行。然而,由共享对象的多个线程进行过于频繁的轮询会导致缓存乒乓现象,不同的处理器会使彼此缓存的部分失效。InnoDB通过在两次轮询之间随机等待时间来最小化这个问题。延迟被实现为一个忙碌的循环。

您可以使用参数innodb_spin_wait_delay来控制测试互斥锁或rw-lock之间的最大延迟。延迟循环的持续时间取决于C编译器和目标处理器。(在100MHz奔腾时代,延迟单位是一微秒。)在所有处理器核心共享高速缓存内存的系统中,可以通过设置innodb_spin_wait_delay=0来减少最大延迟或禁用繁忙循环。在具有多个处理器芯片的系统上,缓存失效的影响可能更加显著,您可能会增加最大延迟。

innodb_spin_wait_delay默认值为6。自旋等待延迟是一个动态的、全局的参数,你可以在MySQL选项文件(my.cnf或my.ini)中指定,或者在运行时使用SET global innodb_spin_wait_delay=delay命令来更改,其中delay是所需的最大延迟。更改设置需要超级权限。

发表评论

电子邮件地址不会被公开。