Методика настройки движка vinyl в Tarantool DB¶
В этом разделе приведены практические рекомендации по настройке параметров движка vinyl.
Общие принципы:
движок vinyl предназначен для работы с диском, но при этом использует память для кеша, индексов и L0 уровня LSM-дерева;
оптимальные значения параметров vinyl сильно зависят от выбранного сценария использования: например, точечные чтения, диапазонные выборки или интенсивная запись;
большинство параметров Tarantool по умолчанию подобраны оптимально. Менять значения таких параметров стоит только после проведения нагрузочного тестирования.
Полный список поддерживаемых опций конфигурации для движка vinyl можно найти в документации Tarantool.
Настройка спейсов и индексов¶
Некоторые параметры vinyl можно задавать не только глобально, но и для конкретного индекса или спейса. Это позволяет гибко адаптировать конфигурацию под разные типы данных в одной базе.
Пример настройки:
box.schema.space.create('example', {engine = 'vinyl'})
box.space.example:format({{name = 'id', type = 'number'}})
box.space.example:create_index('primary', {
parts = {'id'},
bloom_fpr = 0.05,
page_size = 32 * 1024,
run_count_per_level = 2,
run_size_ratio = 3.5,
})
Здесь:
bloom_fpr
– коэффициент ложноположительного срабатывания фильтра Блума. Чем ниже значение, тем точнее фильтр, но больше потребление памяти. Значение по умолчанию: 0.05;page_size
– размер страницы при чтении и записи в байтах. Значение по умолчанию: 8192;vinyl.run_count_per_level
– максимальное количество.run
-файлов на каждом уровне LSM-дерева. Чем больше значение, тем шире LSM-дерево. Значение по умолчанию: 2;vinyl.run_size_ratio
– соотношение между размерами уровней в LSM-дереве. Чем меньше значение, тем выше LSM-дерево. Значение по умолчанию: 3.5.
Рекомендуемые значения параметров¶
vinyl.bloom_fpr¶
Опция определяет точность фильтра Блума. На практике при изменении значения опции значимого улучшения не выявлено.
vinyl.cache¶
Опция позволяет кешировать часто запрашиваемые данные. Если чтения случайные, то увеличение кеша ухудшит производительность чтения.
vinyl.memory¶
Опция определяет размер памяти под первый уровень LSM-дерева и влияет на размер файлов на диске.
При слишком малых значениях vinyl.memory
возможны ошибки вида:
waited for N bytes of vinyl memory quota for too long: X sec
Общие рекомендации
Рекомендуется выставлять значение опции исходя из доступной оперативной памяти («сколько не жалко»). Рекомендуемое начальное значение: 2 ГБ.
Лучше не менять уже заданное значение опции
vinyl.memory
. Резкое увеличение значения может вызвать массовый compaction, так как изменится размер первого уровня (L0).Может использоваться как кеш для последних добавленных данных, но это не основная задача. Для кеша лучше использовать опцию vinyl.cache.
Индексы
Использование более одного вторичного индекса значительно снижает скорость записи. Так, при использовании двух индексов скорость записи может снижаться вдвое.
Для поддержки модуля шардирования
vshard
рекомендуется использовать один первичный индексbucket_id
с первым полемbucket_id
.
vinyl.page_size¶
Один из ключевых параметров. Для современных SSD имеет смысл увеличивать значение с 8 КБ до 64–128 КБ и выше.
Эффекты
Точечные чтения: можно увеличить значение
vinyl.read_threads
, если загрузка составляет больше 50%.Диапазонные чтения: рекомендуется оставить для
vinyl.read_threads
значение по умолчанию. Увеличиватьvinyl.read_threads
не рекомендуется.Чем больше значение
vinyl.page_size
, тем меньше памяти расходуется на индексы.В сценариях архивации данных из спейсов memtx в vinyl опция
vinyl.page_size
– самый важный параметр.
vinyl.range_size¶
Ручная настройка опции не требуется.
Оптимальное значение vinyl.range_size
задается автоматически.
vinyl.read_threads¶
Опция подходит для оптимизации чтений. При изменении значения опции требуется мониторинг нагрузки по потокам.
vinyl.run_count_per_level и vinyl.run_size_ratio¶
Значения по умолчанию для этих опций оптимальны.
Возможна следующая корректировка:
run_count_per_level
: увеличение значения опции до 4–6 может быть полезно;увеличение значения данных опций приводит к росту дискового потребления (compaction выполняется реже).
vinyl.timeout¶
Менять значение опции, выставленное по умолчанию, не рекомендуется. Если системе становится недостаточно значения, указанного по умолчанию, – это индикатор серьезных проблем с производительностью.
vinyl.write_threads¶
Обычно менять значение опции по умолчанию не требуется. Корректировка значения оправдана только при высоких скачках ЦП на потоках compaction/dump (60–70%).
Итоговые рекомендации¶
Подстраивать значения опций
vinyl.memory
иvinyl.page_size
под оборудование и используемые сценарии.Ограничивать количество индексов – оставлять только первичный индекс.
Следить за нагрузкой на потоки чтения и записи при изменении значений
vinyl.read_threads
иvinyl.write_threads
.Для увеличения производительности чтения и записи за счет места на диске можно попробовать повысить значение опции
vinyl.run_count_per_level
до 4–6.