3 апр 2020 (OFF) not_say (B) :

Оптимизация MYSQL на Linux при нехватке ОЗУ

Сохраняем существующий конфиг:
mv /etc/my.cnf /etc/my.cnf_orig

В папке /usr/share/mysql есть образцы конфигов, копируем подходящий (действуем интуитивно) :

cp /usr/share/mysql/my-large.cnf /etc/my.cnf

/etc/init.d/mysqld restart

Качаем mysqltuner :

wget http://mysqltuner.pl -O tuner.pl --no-check-certificate

ждем 5-10 минут чтобы mysql чуть чуть поработал и :

perl tuner.pl

Проверяем тюнером что нужно увеличить, делаем. Перезапускаем :

/etc/init.d/mysqld restart

Таким образом добиваемся оптимального результата, а вот потом самое главное.

Смотрим, сколько ОЗУ может использовать mysql. Для этого в очередной раз запускаем perl tuner.pl и смотрим вот это

[OK] Maximum possible memory usage

Тут написано сколько ОЗУ может брать Mysql. если это 90% - это не нормально (конечно, сервер может быть с одним mysql без php и апача, но это единичные случаи). Нужно добиться показателя в 40-60%, в зависимости от потребления озу апачем. Для этого рекомендую уменьшать буферы, кстати, tuner показывает насколько они используются.

Так же ниже прилагаю несколько оптимальных конфигов для серверов с разным количеством ОЗУ:

1GB:
skip-external-locking
max_allowed_packet = 16M
key_buffer_size = 16M
innodb_buffer_pool_size = 512M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 0
max_connections = 132
query_cache_size = 0
long_query_time = 1
expire_logs_days = 10
max_binlog_size = 100M
2GB:
skip-external-locking
max_allowed_packet = 16M
key_buffer_size = 16M
innodb_buffer_pool_size = 1024M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 0
max_connections = 136
query_cache_size = 0
long_query_time = 1
expire_logs_days = 10
max_binlog_size = 100M
4GB:
skip-external-locking
max_allowed_packet = 16M
key_buffer_size = 16M
innodb_buffer_pool_size = 2048M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 0
max_connections = 144
query_cache_size = 0
long_query_time = 1
expire_logs_days = 10
max_binlog_size = 100M
8GB:
skip-external-locking
max_allowed_packet = 16M
key_buffer_size = 16M
innodb_buffer_pool_size = 4096M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 0
max_connections = 160
query_cache_size = 0
long_query_time = 1
expire_logs_days = 10
max_binlog_size = 100M
16GB:
skip-external-locking
max_allowed_packet = 16M
key_buffer_size = 16M
innodb_buffer_pool_size = 8192M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 0
max_connections = 192
query_cache_size = 0
long_query_time = 1
expire_logs_days = 10
max_binlog_size = 100M
Так же не забываем удалять старые файлы после правки буферов в /var/lib/mysql/
Канал: Linux

Комментарии (0)

Показать комментарий
Скрыть комментарий
Для добавления комментариев необходимо авторизоваться
Версия: Mobile | Lite | Доступно в Google Play