Не системный администратор, так что ... У нас есть база данных размером около 4 ГБ в экземпляре MySQL 5.0.22. Таблица - InnoDB / UTF-8. По сути, это один запрос, который выполняется против индексированного столбца. Оборудование имеет 16 ГБ памяти. В идеале я хотел бы сделать так, чтобы и файл данных, и индексный файл всегда находились в памяти (при этом записи сбрасываются на диск). На этом сервере очень мало активности.
Предполагая, что у него достаточно памяти (что, я думаю, есть), должно ли это быть ожидаемым поведением без подкачки на диск?
Как я могу подтвердить, что такое поведение имеет место?
заранее спасибо
Если у вас нет других запущенных приложений, требующих большого объема памяти, не должно возникнуть проблем с размещением вашего «рабочего набора» в памяти. полностью. У меня есть пара sql-серверов, которые делают именно это. они обеспечивают отличную производительность чтения и не вызывают никаких проблем.
дела, которые необходимо сделать:
убедитесь, что mysql получил указание выделить достаточно пулов буферов для innodb - в my.cnf поместите:
innodb_buffer_pool_size = 8 ГБ
при условии, что у вас нет других приложений, требующих большого объема памяти [apache / any appservs, пользовательские файлы] - минимизируйте доступный своп [существуют различные противоречащие друг другу «школы» по этому вопросу. Я бы поставил 1 ГБ своп + монитор и убедился, что он не используется. ]; [вы можете прочитать некоторые мнения о свопе Вот ]
убедитесь, что mysql «прогрет» сразу после запуска - запустите запрос, который заставляет mysql читать каждую строку / столбец в вашей таблице [s]. просто:
выберите md5 (col1), md5 (col2) из таблицы
должен сделать свое дело. повторить модификации этого запроса [например, length (col1)], чтобы убедиться, что данные действительно считываются из памяти. для более научных проверок, которые вы выполнили, запустите iostat параллельно и убедитесь, что диски не касаются. чтобы быть еще более научным - вы можете посмотреть статистику innodb [чтобы убедиться, что при выполнении новых версий запросов один за другим нет ввода-вывода], выполнив
ПОКАЗАТЬ СТАТУС INNODB ДВИГАТЕЛЯ \ G