Методика настройки движка vinyl в Tarantool DB | Tdb
Руководство пользователя Работа с движками базы данных Методика настройки движка vinyl в Tarantool DB

Методика настройки движка 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.

Found what you were looking for?
Feedback