Ох, как грустненько...
Давайте я опишу как это внутри, а вы попробуете подобрать коэффициенты.
Чтобы сохранить элемент размера X ищется подходящий слаб, назрачение размера которого будет > X
Начинаем со slab_alloc_minimal (он-же memtx_min_tuple_size), по умолчанию равняется 32.
Далее добавляем по 8 байт максимум 31 раз.
(Т.е. в диапазоне 32..280 байт слабы выделяются с шагом 8 байт)
Если X > 280, то алгоритм продолжается: мы берём последний максимальный размер и умножаем его на slab_alloc_factor (по умолчанию 1.05) до тех пор, пока данные не впишутся (ну и ещё там есть выравнивание). пример продолжения: 280*1.05=294, 294*1.05=308, ...
Что можно тюнить:
1. Можно поменять фактор. Например поставить 2. Это сильно уменьшит количество различных классов и повысит переиспользование выделенных слабов.
2. Можно поднять memtx_min_tuple_size. Это поднимет стартовую точку отсчёта.
Для ваших данных я вижу следующую картину:
У вас немного данных, которые меньше 1 kb. Можно сделать memtx_min_tuple_size=776 (1024-31*8)
Это сделает линейку стартовых слабов, в которые будут раскладываться все таплы < 1kb.
Далее у вас идёт очень сильный разрыв между данными. Поэтому я бы взял крупный фактор (1.5 - 2)
Итого: попробуйте добавить своему инстансу
memtx_min_tuple_size=776,
slab_alloc_factor=2,