Назад | Перейти на главную страницу

Как мне назначить ограничение памяти для mySQL?

Тюнер mysql сообщает, что mySQL может использовать 166% установленной оперативной памяти, как мне ограничить использование оперативной памяти?

[!!] Максимально возможное использование памяти: 426,8 МБ (166% установленной ОЗУ)

Вы можете настроить

  • Все MyISAM
  • Все InnoDB
  • Смесь MyISAM и InnoDB

Перед выделением памяти любому механизму полезно подумать о том, какое кэширование происходит с каждым механизмом хранения.

Настройка для MYISAM

Основной используемый механизм - это кэш ключей. Он кэширует только страницы индекса из файлов .MYI. Чтобы изменить размер кеш-памяти ключей, выполните следующий запрос:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1))
recommended_key_buffer_size FROM
(SELECT LEAST(POWER(2,32),KBS1) KBS
FROM (SELECT SUM(index_length) KBS1
FROM information_schema.tables
WHERE engine='MyISAM' AND
table_schema NOT IN ('information_schema','mysql')) AA ) A,
(SELECT 2 PowerOf1024) B;

Это даст рекомендуемые настройки для MyISAM Key Cache (key_buffer_size) с учетом вашего текущего набора данных (запрос ограничит рекомендацию 4G (4096M). Для 32-разрядной ОС пределом является 4 ГБ. Для 64-битной версии 8 ГБ.

Настройка для InnoDB

Основной используемый механизм - это буферный пул InnoDB. Он кэширует данные и индексные страницы из доступных таблиц InnoDB. Чтобы определить размер пула буферов InnoDB, выполните следующий запрос:

SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 2 PowerOf1024) B;

Это даст Рекомендуемую настройку для размера пула буферов InnoDB (innodb_buffer_pool_size) с учетом вашего текущего набора данных.

Не забудьте изменить размер файлов журнала InnoDB (ib_logfile0 и ib_logfile1). Исходный код MySQL устанавливает верхний предел объединенных размеров всех файлов журнала InnoDB, который должен быть <4G (4096M). (ПРИМЕЧАНИЕ: двоичные файлы Percona Server превосходят это. Недавно я установил большой сервер БД с 4G для одного файла журнала InnoDB, используя innodb_log_file_size)

Для простоты, учитывая всего два файла журнала, вот как вы можете изменить их размер:

  • Шаг 1) добавьте innodb_log_file_size = NNN в /etc/my.cnf (NNN должно составлять 25% от innodb_buffer_pool_size или 2047M, в зависимости от того, что меньше)
  • Шаг 2) служба mysql stop
  • Шаг 3) rm / var / log / mysql / ib_logfile [01]
  • Шаг 4) запуск службы mysql (ib_logfile0 и ib_logfile1 воссоздаются)

ПРЕДОСТЕРЕЖЕНИЕ

В конце обоих запросов находится встроенный запрос: (SELECT 2 PowerOfTwo) B

  • (SELECT 0 PowerOf1024) дает настройку в байтах
  • (SELECT 1 PowerOf1024) дает настройку в килобайтах
  • (SELECT 2 PowerOf1024) дает настройку в мегабайтах
  • (SELECT 3 PowerOf1024) дает настройку в гигабайтах
  • Не допускается степень меньше 0 или больше 3

Эпилог

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

Если у вас 2 ГБ ОЗУ и 16 ГБ InnoDB, выделите 512 МБ как innodb_buffer_pool_size.

Если у вас 2 ГБ ОЗУ и 4 ГБ индексов MyISAM, выделите 512 МБ как key_buffer_size.

Если у вас 2 ГБ ОЗУ, 4 ГБ индексов MyISAM и 16 ГБ InnoDB, выделите 512 МБ как key_buffer_size и 512M как innodb_buffer_pool_size.

Возможные сценарии бесконечны !!!

Помните, что бы вы ни выделяли, оставьте достаточно ОЗУ для подключений к БД и операционной системы.

в случае Myisam Engine

key_buffer_size + (read_buffer_size + sort_buffer_size) * max_connections

это значение дает общую возможную память, которую может потреблять mysql. Это должно быть меньше вашей RAM или почти 60% RAM. в случае innodb innodb_buffer_pool_size должно быть меньше вашей RAM или 60% вашего RAM

Настройте указанные выше значения, чтобы использование ОЗУ составляло 60% от вашей ОЗУ.

Вы должны настроить key_buffer_size и innodb_buffer_pool_size в твоем my.cnf, эти два параметра являются наиболее важными параметрами, связанными с памятью. Чтобы получить текущие значения, используйте show variables like 'key_buffer_size'; и show variables like 'innodb_buffer_pool_size'; в mysql клиент командной строки.