3 апр 2020 not_say :
Оптимизация 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:
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: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
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: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
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: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
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: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
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/ 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
Канал: Linux
70 | 0 | 1 | 4 |
Для добавления комментариев необходимо авторизоваться