Есть страничка в wiki
https://github.com/tarantool/tarantool/wiki/Memory-size-calculationОна описывает методику с точки зрения структур хранения данных
По хорошему, чтобы посчитать довольно точно, нужны:
* оценочное количество записей (в пределе) (N)
* средний размер записи (строки/тапла). можно проверить в консоли, создав примерный тапл и посмотрев bsize (
box.tuple.new{ "abc", 1e5, 42 }:bsize()
) (S)
* размер чисто спейса будет N * ( S + 14 ) (без индексов)
далее считаем индексы.
* в зависимости от версии тарантула и типа индекса он занимает от 16 до 22 байт. можно взять оценку сверху в 22. итого все индексы: N * 22 * I, где I — это кличество индексов.
следующий этап: нагрузка.
тут нужно учесть 2 момент
* таплы "в полёте" (обычно это малая величина в сравнении с общим объёмом. пример расчёта есть по ссылке)
* сетевые буфера. на одно соединение обычно расходуется 2 x readahead. дефолтный буфер всего 16Kb, но если его подкрутить в сторону нескольких мегабайт и подключить несколько тысяч клиентов, то может получиться очень внушительная цифра.
теперь Lua. "нормальным" можно считать потребление памяти в луа до 0.5 гб (но вообще предел в 2 гб).
Ну и напоследок можно выбрать коэффициент "ошибки". Вот тут уже те самые 10% вполне можно накинуть. туда войдёт фрагментация, какие-то неучтённые вещи.
Завершает расчёт умножение на количество реплик. Оптимальным считается использование 3х реплик в репликасете. Бывает используют 2, бывает 5 или больше.