У меня есть таблица MySQL с файлом .MYD размером 44 ГБ и файлом .MYI размером 34 ГБ. Я запускаю сценарии из командной строки, которые анализируют данные в этой таблице. MySQL не загружает процессор на максимум, моя память исчерпана, а VMSTAT сообщает, что данные выгружаются на диск ... но я не очень хорошо знаком с этой утилитой и ее отчетами.
Я использую экземпляр Amazon EC2 с высоким объемом памяти Double XL. Он имеет 34 ГБ оперативной памяти. Я не очень знаком с настройкой MySQL, и система работает с установкой по умолчанию на Linux CentOS.
Достаточно ли на текущей машине памяти для эффективной работы с этой таблицей? О каких еще конфигурациях мне нужно беспокоиться? Самая большая из доступных мне систем имеет 68 ГБ памяти. Что именно MySQL загружает в память при загрузке таблицы? Я хотел бы лучше понять, что происходит.
Скачать тюнер mysql и запустите его после попытки импорта. Он сообщит вам, какие настройки следует изменить в /etc/my.cnf 32 ГБ ОЗУ должно быть достаточно, если вы правильно настроили индексы.
Имейте в виду, что MyISAM не кэширует данные MyISAM. Он кэширует только индексы MyISAM.
Кэш ключей MyISAM (размер key_buffer_size) имеет максимальный размер 4 ГБ в 32-разрядных системах. Вы можете увеличить размер кэша ключей MyISAM в 64-битных системах.
Вот кое-что, что может помочь вам, если вам необходимо кэшировать весь файл .MYI:
Попробуйте использовать специальный кэш ключей MyISAM.
Например, предположим, что у вас есть таблица MyISAM с именем mydb.mytable, размер файла .MYI которой составляет 34 ГБ.
Вот как вы настраиваете выделенный ключевой кеш только для этой таблицы:
SET GLOBAL my_dedicate_keycache.key_buffer_size = 1024 * 1024 * 1024 * 34;
CACHE INDEX mydb.mytable INTO my_dedicate_keycache;
LOAD INDEX INTO CACHE mydb.mytable;
Это такой большой файл. Как бы вы хотели загрузить его при запуске mysql?
Создайте файл с именем /var/lib/mysql/startup_stuff.sql
cd /var/lib/mysql
echo "SET GLOBAL my_dedicate_keycache.key_buffer_size = 1024 * 1024 * 1024 * 34;" > startup_stuff.sql
echo "CACHE INDEX mydb.mytable INTO my_dedicate_keycache;" >> startup_stuff.sql
echo "LOAD INDEX INTO CACHE mydb.mytable;" >> startup_stuff.sql
Затем добавьте это в /etc/my.cnf
[mysqld]
init_file=/var/lib/mysql/startup_stuff.sql
Наконец, перезапустите mysql
service mysql restart