Сколько бы у вас не было ОЗУ и какой бы мощный процессор, все равно все будет упираться в скорость жесткого диска, запросы и таблицы не берем в расчет. Не так давно я заметил, что HDD на сервак очень сильно нагружены, а именно из за того что служба
mysql/mariadb лезет в
swap
UPD:
Будьте осторожны, если у вас закончится swap и ОЗУ — могут быть поврежденные данные
Пошуршав в доках
mysql нашел интересный параметр
--memlock(Lock the mysqld process in memory. This option might help if you have a problem where the operating system is causing mysqld to swap to disk. )
Как раз то что надо, добавляем
memlock в конфиг
my.cnf, но не спешим радоваться, есть такая штука как
ulimit, и по умолчанию там запрещено лочить память больше 16384 кбайт, посмотреть можно командой
ulimit -l
.
Решение:
Если у вас
systemd, идем в каталог
/etc/systemd/system ищем там каталог
mariadb.service.d или
mysqld.service.d если таких каталогов нет, то нужно создать в зависимости от того какой сервер у вас установлен, внутри создаем файл
custom.conf с содержимым:
[Service]
LimitMEMLOCK=infinity
Данный параметр разрешает «захватывать» память без ограничений.
Выполняем
systemctl system-reload
и перезапускаем службу mysql,
systemctl restart mysqld
Если до этого
mysql лез в
swap, то после данных манипуляций больше он это делать не посмеет.
Главное убедитесь что у вас есть достаточное количество ОЗУ для ваших настроек, как все подсчитать есть в интернетах.
Примерная формула:
innodb_buffer_pool_size + innodb_additional_mem_pool_size + innodb_log_buffer_size + key_buffer_size + query_cache_size
Данный скрипт покажет кто использует
swap
#!/bin/bash
SUM=0
OVERALL=0
for DIR in `find /proc/ -maxdepth 1 -type d -regex "^/proc/[0-9]+"`
do
PID=`echo $DIR | cut -d / -f 3`
PROGNAME=`ps -p $PID -o comm --no-headers`
for SWAP in `grep VmSwap $DIR/status 2>/dev/null | awk '{ print $2 }'`
do
let SUM=$SUM+$SWAP
done
if (( $SUM > 0 )); then
echo "PID=$PID swapped $SUM KB ($PROGNAME)"
fi
let OVERALL=$OVERALL+$SUM
SUM=0
done
echo "Overall swap used: $OVERALL KB"
Комментарии ()