Я ударил по кирпичной стене около 1 миллиона записей на каждый осколок (осколок на стороне клиента, ничего особенного). Я пробовал различные варианты ttserver, и они, казалось, не имели никакого значения, поэтому я посмотрел на сторону ядра и обнаружил, что
echo 80 > /proc/sys/vm/dirty_ratio
(предыдущее значение было 10) дало значительное улучшение - ниже приводится общий размер данных (по 8 осколков, каждый на своем узле), печатаемых каждую минуту:
total: 14238792 records, 27.5881 GB size
total: 14263546 records, 27.6415 GB size
total: 14288997 records, 27.6824 GB size
total: 14309739 records, 27.7144 GB size
total: 14323563 records, 27.7438 GB size
(here I changed the dirty_ratio setting for all shards)
total: 14394007 records, 27.8996 GB size
total: 14486489 records, 28.0758 GB size
total: 14571409 records, 28.2898 GB size
total: 14663636 records, 28.4929 GB size
total: 14802109 records, 28.7366 GB size
Итак, вы можете видеть, что улучшение было порядка 7-8 раз. В этот момент размер базы данных составлял около 4,5 ГБ на узел (включая индексы), а узлы имели 8 ГБ ОЗУ (поэтому значение dirty_ratio, равное 10, означало, что ядро пыталось сохранить менее 800 МБ грязной).
Следующая вещь, которую я попробую, это ext2 (в настоящее время: ext3) и noatime, а также хранение всего на виртуальном диске (это, вероятно, будет тратить вдвое больше памяти, но может стоить).