Spec-Zone.ru › MySQL 5.7

14.8.9 Настройка опроса блокировки вращения

InnoDB и обычно зарезервированы для коротких интервалов. В многоядерной системе для потока может быть эффективнее непрерывно проверять, может ли он получить мьютекс или rw-блокировку в течение определенного времени, прежде чем перейти в режим ожидания. Если мьютекс или rw-блокировка становится доступной в течение этого периода, поток может продолжить работу немедленно, в том же временном интервале. Однако слишком частое опробование общего объекта, такого как мьютекс или rw-блокировка, множеством потоков может привести к “перебросу кэша”, что приводит к тому, что процессоры делают недействительными части кэша друг друга. InnoDB минимизирует эту проблему, вводя случайную задержку между опросами, чтобы десинхронизировать активность опроса. Случайная задержка реализуется как цикл ожидания вращения.

Длительность цикла ожидания вращения определяется количеством инструкций PAUSE, которые выполняются в цикле. Это число генерируется путём случайного выбора целого числа от 0 до, но не включая, значение innodb_spin_wait_delay, и умножения этого значения на 50. Например, целое число случайно выбирается из следующего диапазона для значения innodb_spin_wait_delay равного 6:

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

Выбранное целое число умножается на 50, что приводит к одному из шести возможных значений инструкции PAUSE:

{0,50,100,150,200,250}

Для этого набора значений 250 — максимальное количество инструкций PAUSE, которые могут быть выполнены в цикле ожидания вращения. Значение innodb_spin_wait_delay равное 5 приводит к набору из пяти возможных значений {0,50,100,150,200}, где 200 — максимальное количество инструкций PAUSE, и так далее. Таким образом, значение innodb_spin_wait_delay управляет максимальной задержкой между опросами блокировки вращения.

Длительность цикла задержки зависит от компилятора C и целевого процессора. В эпоху 100-мегагерцевого Pentium, единица innodb_spin_wait_delay была откалибрована так, чтобы быть эквивалентной одному микросекунду. Это соответствие времени не сохранилось, но продолжительность инструкции PAUSE оставалась достаточно постоянной в терминах тактов процессора по отношению к другим инструкциям процессора на большинстве архитектур процессоров.

В системе, где все ядра процессора разделяют быструю кэш-память, вы можете уменьшить максимальную задержку или вообще отключить цикл ожидания, установив innodb_spin_wait_delay=0. В системе с несколькими процессорными чипами влияние аннулирования кэша может быть более значительным, и вы можете увеличить максимальную задержку.

Переменная innodb_spin_wait_delay динамическая. Она может быть указана в файле параметров MySQL или изменена во время выполнения с помощью SET GLOBAL оператора. Изменение во время выполнения требует привилегий, достаточных для задания глобальных системных переменных. См. Раздел 5.1.8.1, «Привилегии для системных переменных».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-performance-spin_lock_polling.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API