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

Сколько памяти мне нужно для загрузки таблицы 50 ГБ + MySQL?

У меня есть таблица 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