На самом деле это общий вопрос об оптимальной настройке для среды MySQL, но наши текущие серверы MySQL установлены на машинах с 16 ГБ ОЗУ, мы недавно перешли на более новые серверы (более мощные во всех отношениях, новые серверы Dell Poweredge), но с 128 ГБ Оперативная память доступна.
У нас, так сказать, чистый лист, но мы задаемся вопросом, как правильно оптимизировать все, чтобы оно работало на полную мощность на новом оборудовании. Любые рекомендации по:
Все, что у меня есть на данный момент, это текущие файлы my.cnf, которые были настроены для последних серверов, но я не могу найти в Интернете подробных указаний о том, что какие-либо настройки должны быть выше, чем они есть.
Вы можете захотеть бежать mysqltuner.pl
чтобы получить рекомендации по настройке для вашей базы данных.
Вот как вы можете настроить key_buffer_size и innodb_buffer_pool_size
Установка размера ключевого буфера для MyISAM
SELECT CONCAT (ROUND (KBS / POWER (1024; IF (pw <0,0, IF (pw> 3,0, pw))) + 0,49999), SUBSTR ('KMG', IF (pw <0,0, IF (pw> 3,0, pw)) + 1,1)) Recommended_key_buffer_size FROM (SELECT SUM (index_length) KBS FROM information_schema.tables WHERE engine = 'MyISAM' И table_schema NOT IN ('information_schema', 'mysql')) A , (ВЫБЕРИТЕ 3 pw) B;
Кстати, максимальный размер key_buffer_size, который работает правильно, составляет 4G
Поэтому установите для key_buffer_size значение 4G или рекомендованное значение из предыдущего запроса, в зависимости от того, что меньше.
Настройка innodb_buffer_pool_size
SELECT CONCAT (ROUND (KBS / POWER (1024; IF (pw <0,0, IF (pw> 3,0, pw))) + 0,49999), SUBSTR ('KMG', IF (pw <0,0, IF (pw> 3,0, pw)) + 1,1)) Recommended_innodb_buffer_pool_size FROM (SELECT SUM (data_length + index_length) KBS FROM information_schema.tables WHERE engine = 'InnoDB') A, (SELECT 3 pw) B;
Вы также можете изменить размер файлов ib_logfile0 и ib_logfile1. Вот как:
Шаг 1) служба mysql stop
Шаг 2) добавьте эту строку в /etc/my.cnf
innodb_log_file_size = 2047M (или 25% от рекомендованного_innodb_buffer_pool_size, в зависимости от того, что меньше)
Шаг 3) rm -f / var / log / mysql / ib_logfile [01]
Шаг 4) запуск службы mysql
Чтобы понять, почему эти настройки имеют смысл, запустите этот запрос
ВЫБЕРИТЕ IFNULL (B.engine, 'Total') «Storage Engine», CONCAT (LPAD (REPLACE (FORMAT (B.DSize / POWER (1024, pw), 3), ',', ''), 17, '') ), '', SUBSTR ('KMGTP', pw + 1,1), 'B') "Размер данных", CONCAT (LPAD (REPLACE (FORMAT (B.ISize / POWER (1024, pw), 3), ' , ',' '), 17,' '),' ', SUBSTR (' KMGTP ', pw + 1,1),' B ') «Размер индекса», CONCAT (LPAD (REPLACE (FORMAT (B.TSize / POWER (1024, pw), 3), ',', ''), 17, ''), '', SUBSTR ('KMGTP', pw + 1,1), 'B') "Размер таблицы" FROM ( Механизм SELECT, SUM (data_length) DSize, SUM (index_length) ISize, SUM (data_length + index_length) TSize FROM information_schema.tables ГДЕ table_schema НЕ ВХОДИТ ('mysql', 'information_schema', 'performance_schema') И механизм НЕ ЯВЛЯЕТСЯ NULL GROUP BY двигатель С ROLLUP) B, (ВЫБЕРИТЕ 3 pw) A ЗАКАЗ ПО TSize;
Если вы используете InnoDB, вы должны включить innodb_file_per_table и очистите ваше хранилище InnoDB