Тюнер mysql сообщает, что mySQL может использовать 166% установленной оперативной памяти, как мне ограничить использование оперативной памяти?
[!!] Максимально возможное использование памяти: 426,8 МБ (166% установленной ОЗУ)
Вы можете настроить
Перед выделением памяти любому механизму полезно подумать о том, какое кэширование происходит с каждым механизмом хранения.
Основной используемый механизм - это кэш ключей. Он кэширует только страницы индекса из файлов .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, выполните следующий запрос:
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)
Для простоты, учитывая всего два файла журнала, вот как вы можете изменить их размер:
В конце обоих запросов находится встроенный запрос: (SELECT 2 PowerOfTwo) B
(SELECT 0 PowerOf1024)
дает настройку в байтах(SELECT 1 PowerOf1024)
дает настройку в килобайтах(SELECT 2 PowerOf1024)
дает настройку в мегабайтах(SELECT 3 PowerOf1024)
дает настройку в гигабайтахЗдравый смысл ничем не заменит. Если у вас ограниченная память, несколько механизмов хранения или их комбинация, вам придется подстраиваться под разные сценарии.
Если у вас 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
клиент командной строки.