Секция конфигурации table_service_config

Секция table_service_config содержит параметры конфигурации для сервиса таблиц, включая настройки спиллинга.

spilling_service_config

Спиллинг — это механизм управления памятью в YDB, который временно сохраняет данные на диск при нехватке оперативной памяти.

Основные параметры конфигурации

table_service_config:
  spilling_service_config:
    local_file_config:
      root: ""
      max_total_size: 21474836480
      io_thread_pool:
        workers_count: 2
        queue_size: 1000

Конфигурация директории

local_file_config.root

Тип: string
По умолчанию: "" (временная директория)
Описание: Файловая директория для сохранения файлов спиллинга.

Для каждого процесса ydbd создается отдельная директория с уникальным именем. Директории спиллинга имеют следующий формат имени:

node_<node_id>_<spilling_service_id>

Где:

  • node_id — идентификатор узла
  • spilling_service_id — уникальный идентификатор экземпляра, который создается при инициализации Spilling Service один раз при запуске процесса ydbd

Файлы спиллинга хранятся внутри каждой такой директории.

Пример полного пути к директории спиллинга:

/tmp/spilling-tmp-<username>/node_1_32860791-037c-42b4-b201-82a0a337ac80

Где:

  • /tmp — значение параметра root
  • <username> — имя пользователя, под которым запускается процесс ydbd

Важные замечания:

  • При запуске процесса все существующие директории спиллинга в указанной директории автоматически удаляются. Директории спиллинга имеют специальный формат имени, который включает идентификатор экземпляра, генерируемый один раз при запуске процесса ydbd. При запуске нового процесса все директории в директории спиллинга, которые соответствуют формату имени, но имеют другой spilling_service_id от текущего, удаляются.
  • Директория должна иметь достаточные права на запись и чтение для пользователя, под которым запускается ydbd

Примечание

Спиллинг выполняется только на узлах базы данных.

Возможные ошибки
  • Permission denied — недостаточные права доступа к директории. См. Permission denied

local_file_config.max_total_size

Тип: uint64
По умолчанию: 21474836480 (20 GiB)
Описание: Максимальный суммарный размер всех файлов спиллинга на каждом узле. При превышении лимита операции спиллинга завершаются ошибкой. Общий лимит спиллинга во всем кластере равен сумме значений max_total_size со всех узлов.

Рекомендации
  • Устанавливайте значение исходя из доступного дискового пространства
Возможные ошибки
  • Total size limit exceeded: X/YMb — превышен максимальный суммарный размер файлов спиллинга. См. Total size limit exceeded

Конфигурация пула потоков

Примечание

Потоки пула I/O для спиллинга создаются дополнительно к потокам, выделяемым для акторной системы. При планировании количества потоков учитывайте общую нагрузку на систему.

Важно: Пул потоков спиллинга отделен от пулов потоков акторной системы.

Для получения информации о настройке пулов потоков акторной системы и их влиянии на производительность системы см. Конфигурация акторной системы и Изменение конфигурации акторной системы. Для Configuration V2 настройки акторной системы описаны в настройках Configuration V2.

local_file_config.io_thread_pool.workers_count

Тип: uint32
По умолчанию: 2
Описание: Количество рабочих потоков для обработки операций ввода-вывода спиллинга.

Рекомендации
  • Увеличивайте для высоконагруженных систем
Возможные ошибки
  • Can not run operation — переполнение очереди операций в пуле потоков I/O. См. Can not run operation

local_file_config.io_thread_pool.queue_size

Тип: uint32
По умолчанию: 1000
Описание: Размер очереди операций спиллинга. Каждая задача отправляет только один блок данных на спиллинг одновременно, поэтому большие значения обычно не требуются.

Возможные ошибки
  • Can not run operation — переполнение очереди операций в пуле потоков I/O. См. Can not run operation

Управление памятью

Связь с memory_controller_config

Активация спиллинга тесно связана с настройками контроллера памяти. Подробная конфигурация memory_controller_config описана в отдельной статье.

Ключевым параметром для спиллинга является activities_limit_percent, который определяет объем памяти, выделяемый для активностей по обработке запросов. От этого параметра зависит доступная память для пользовательских запросов и, соответственно, частота активации спиллинга.

Влияние на спиллинг

  • При увеличении activities_limit_percent больше памяти доступно для запросов → спиллинг активируется реже
  • При уменьшении activities_limit_percent меньше памяти доступно для запросов → спиллинг активируется чаще

Важно

Однако важно учитывать, что сам спиллинг также требует память. Если установить activities_limit_percent слишком высоким, память может все равно закончиться несмотря на спиллинг, поскольку механизм спиллинга сам потребляет ресурсы памяти.

Требования к файловой системе

Файловые дескрипторы

Примечание

Для получения информации о настройке лимитов файловых дескрипторов при первоначальном развертывании см. раздел Лимиты файловых дескрипторов.

Примеры конфигурации

Высоконагруженная система

Для максимальной производительности в высоконагруженных системах рекомендуется увеличить размер спиллинга и количество рабочих потоков:

table_service_config:
  spilling_service_config:
    local_file_config:
      root: ""
      max_total_size: 107374182400   # 100 GiB
      io_thread_pool:
        workers_count: 8
        queue_size: 2000

Ограниченные ресурсы

Для систем с ограниченными ресурсами рекомендуется использовать консервативные настройки:

table_service_config:
  spilling_service_config:
    local_file_config:
      root: ""
      max_total_size: 5368709120     # 5 GiB
      io_thread_pool:
        workers_count: 1
        queue_size: 500

Расширенная конфигурация

Включение и отключение спиллинга

Следующие параметры управляют включением и отключением различных типов спиллинга. Их следует изменять только при наличии специфических требований системы.

local_file_config.enable

Расположение: table_service_config.spilling_service_config.local_file_config.enable
Тип: boolean
По умолчанию: true
Описание: Включает или отключает сервис спиллинга. При отключении (false) спиллинг не функционирует, что может привести к ошибкам при обработке больших объемов данных.

Возможные ошибки
  • Spilling Service not started / Service not started — попытка использования спиллинга при выключенном Spilling Service. См. Spilling Service not started
table_service_config:
  spilling_service_config:
    local_file_config:
      enable: true
enable_spilling_nodes

Расположение: table_service_config.enable_spilling_nodes
Тип: bool
По умолчанию: true
Описание: Включает спиллинг на узлах базы данных. При отключении (false) спиллинг не функционирует на узлах базы данных.

table_service_config:
  enable_spilling_nodes: true
enable_query_service_spilling

Расположение: table_service_config.enable_query_service_spilling
Тип: boolean
По умолчанию: true
Описание: Глобальная опция, которая включает транспортный спиллинг при передаче данных между задачами.

table_service_config:
  enable_query_service_spilling: true

Примечание

Эта настройка работает совместно с локальной конфигурацией сервиса спиллинга. При отключении (false) транспортный спиллинг не функционирует даже при включенном spilling_service_config.

Полный пример

table_service_config:
  enable_spilling_nodes: true
  enable_query_service_spilling: true
  spilling_service_config:
    local_file_config:
      enable: true
      root: "/var/spilling"
      max_total_size: 53687091200    # 50 GiB
      io_thread_pool:
        workers_count: 4
        queue_size: 1500

См. также

Следующая