Mysql даёт оверхед 50 раз в обычной MyISAM таблице с BLOB. Как уменьшить?

Есть 16 таблиц MyISAM. Первое поле — int, второе — BLOB. Второе поле может как расти, так и уменьшаться, но в целом размер меняется не очень быстро во времени (в большинстве запросов незначительно растёт). Операции — UPDATE (~100 в секунду). Размер таблиц ~4 ГБ каждая. В базу пишется около 200 КБ/с, но в iotop видно, что mysql пишет на ssd аж 10 МБ/с, т.е. оверхед 50 раз! Естественно, это негативно влияет на срок жизни ssd. Есть способ справиться с этим ужасом?

PS. Временная папка mysql смонтирована на tmpfs, поэтому здесь проблем не может быть.
  • Вопрос задан
  • 586 просмотров
Пригласить эксперта
Ответы на вопрос 2
romy4
@romy4
Exception handler
200кб → в базу → чёрный ящик → 10мб/с
если рассмотреть чёрный ящик, то база кроме всего прочего работает не с каждым байтом данных, а с блоками по 4кб каждый. в каком порядке она их записывает — неизвестно
например, добавляя один байт данных в строке база может не найти под него место и тогда надо создавать новый 4кб блок, записывать его на диск, и записывать старый блок на диск помеченный как освободившийся (итого на 1 ваш байт - 8 кб записи) и т.д.
Но точно я вам никогда не скажу почему пишет там много, потому что только вы можете тулзами посмотреть с какими файлами работает база.
Ответ написан
@baadf00d
По идее БД типа berkeley db или leveldb должны иметь наименьший оверхед при записи данных т.к. все апдейты и инсерты там дописываются в конец последнего файла. У вас есть возможность вынести этот процесс в отдельную БД или перенести эту таблицу на движок BDB в рамках той же mysql?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы