V
V
vitaliy22016-11-16 10:18:31
MySQL
vitaliy2, 2016-11-16 10:18:31

Mysql gives an overhead 50 times in a normal MyISAM table with a BLOB. How to reduce?

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

Answer the question

In order to leave comments, you need to log in

2 answer(s)
R
romy4, 2016-11-16
@romy4

200кб → в базу → чёрный ящик → 10мб/с
если рассмотреть чёрный ящик, то база кроме всего прочего работает не с каждым байтом данных, а с блоками по 4кб каждый. в каком порядке она их записывает — неизвестно
например, добавляя один байт данных в строке база может не найти под него место и тогда надо создавать новый 4кб блок, записывать его на диск, и записывать старый блок на диск помеченный как освободившийся (итого на 1 ваш байт - 8 кб записи) и т.д.
Но точно я вам никогда не скажу почему пишет там много, потому что только вы можете тулзами посмотреть с какими файлами работает база.

B
baadf00d, 2016-11-24
@baadf00d

По идее БД типа berkeley db или leveldb должны иметь наименьший оверхед при записи данных т.к. все апдейты и инсерты там дописываются в конец последнего файла. У вас есть возможность вынести этот процесс в отдельную БД или перенести эту таблицу на движок BDB в рамках той же mysql?

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question