Spec-Zone.ru › MariaDB

Настройка Swappiness

Почему следует избегать использования свопинга

Очевидно, доступ к памяти свопинга с диска значительно медленнее, чем прямой доступ к оперативной памяти. Это особенно плохо на сервере базы данных, потому что:

  • Внутренние алгоритмы MariaDB предполагают, что память не является свопинговой, и работают крайне неэффективно, если она таковая. Некоторые алгоритмы предназначены для избегания или задержки ввода-вывода на диск и использования памяти по возможности – применение этого с свопингом может быть хуже, чем просто выполнить это на диске.
  • Свопинг увеличивает ввод-вывод по сравнению с прямым использованием диска, так как страницы активно перемещаются в свопинг и из него. Даже такие действия, как удаление грязной страницы, которая больше не будет храниться в памяти, призваны повысить эффективность, но в ситуации с свопингом обойдутся большим количеством операций ввода-вывода.
  • Блокировки базы данных особенно неэффективны при свопинге. Они предназначены для частого и быстрого получения и освобождения, а паузы для выполнения операций ввода-вывода окажут серьезное влияние на их пригодность к использованию.

Основной способ избежать свопинга – убедиться, что у вас достаточно оперативной памяти для всех процессов, которые необходимо запустить на машине. Если значения системных переменных установлены слишком высокими, то под нагрузкой сервер может испытывать недостаток памяти и потребовать использование свопинга. Поэтому крайне важно понимать, какие значения использовать и как это влияет на использование памяти сервером.

Настройка Swappiness в Linux

Linux имеет настройку swappiness, которая определяет баланс между заменой страниц (фрагментов памяти) из оперативной памяти на предварительно настроенное пространство свопинга на жёстком диске.

Настройка варьируется от 0 до 100, при меньших значениях вероятность свопинга ниже. Значение по умолчанию обычно равно 60 – вы можете проверить это, выполнив:

sysctl vm.swappiness

Значение по умолчанию стимулирует сервер использовать свопинг. Поскольку на сервере базы данных, вероятно, будет мало других процессов помимо процессов MariaDB для размещения в свопинге, вы, вероятно, захотите уменьшить это значение до нуля, чтобы максимально избежать свопинга. Вы можете изменить значение по умолчанию, добавив строку в файл sysctl.conf (обычно расположенный в /etc/sysctl.conf).

Чтобы установить swappiness в ноль, добавьте строку:

vm.swappiness = 0

Это обычно вступает в силу после перезагрузки, но вы можете изменить значение без перезагрузки следующим образом:

sysctl -w vm.swappiness=0

Начиная с RHEL 6.4, настройка swappiness=0 более агрессивно избегает свопинга, что повышает риск завершения процесса из-за отсутствия памяти (OOM killing) при сильной нагрузке на память и ввод-вывод.

Для задач обработки баз данных рекомендуется низкое значение swappiness. Для баз данных MariaDB рекомендуется установить swappiness в значение 1.

vm.swappiness = 1

Отключение свопинга полностью

Хотя некоторые отключают свопинг полностью, и вы, безусловно, хотите избежать использования им любых процессов базы данных, разумно оставить некоторое пространство свопинга, чтобы хотя бы позволить ядру корректно завершиться при возникновении пиковых нагрузок. Наличие резервного свопинга по крайней мере даёт возможность убить любые неконтролируемые процессы.

Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительной проверки MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/configuring-swappiness/

Spec-Zone.ru

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