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

MySQL интенсивная настройка записи, kjournald выполняет много операций ввода-вывода

У меня есть установка MySQL (на самом деле, MariaDB 5.2), развернутая на узле Rackspacecloud 4Gb. Все таблицы относятся к InnoDB, размер буферного пула InnoDB составляет 2 ГБ, и большую часть времени он заполнен на 95%. Я использую ext3 в качестве файловой системы (не уверен, что могу использовать что-нибудь еще на облачном узле). Мое приложение выполняет много операций записи в две таблицы статистики. Обе таблицы имеют PK auto_increment и уникальный индекс. Эти таблицы очищаются каждые 10 минут заданием cron. Это задание cron также выполняет ряд длительных запросов для обработки необработанной статистики.

Проблема в том, что время от времени у меня возникают резкие скачки ввода-вывода. Похоже, они связаны с рядом непроверенных байтов в журнале транзакций InnoDB. Среднее количество незарегистрированных байтов составляет 18,6 МБ, но когда я вижу эти всплески, оно достигает 80-90 МБ. Не уверен, что здесь вызывает.

Iotop показывает, что kjournald является лучшим исполнителем, когда происходят эти всплески. Я перемонтировал FS с опцией «data = writeback», но безрезультатно, kjournald все еще был наверху. Я также пытался уменьшить подкачку и увеличить очередь / nr_requests для корневого устройства, но это тоже не помогло.

Я не знаю, что делать дальше. Интересно, почему kjournald вообще генерирует такую ​​огромную нагрузку ввода-вывода на FS, при этом в журнал ведутся только метаданные. Стоит ли попробовать настроить интервал фиксации? Или возможно использовать ionice?

80-90М

Это близко к размеру журнала по умолчанию EXT3. Похоже, он наполняется, а затем начинает его промывать. Ответ во многом зависит от того, насколько вы заботитесь о согласованности файловой системы, потому что она либо дает вам множество вариантов, либо довольно мало.

Кроме того, если эти таблицы статистики «очищаются каждые 10 минут», почему они вообще не хранятся в памяти?