table_service_config

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

resource_manager

В подсекции resource_manager задаются параметры управления ресурсами сервиса таблиц.

Кэш level table векторного индекса

Level table (indexImplLevelTable) векторного индекса vector_kmeans_tree хранит центроиды, к которым YDB обращается на каждом шаге спуска по дереву кластеров во время векторного поиска. Чтобы не перечитывать эти центроиды из распределённого хранилища при каждом запросе, YDB может кэшировать их в памяти на каждом узле базы данных.

Кэш создаётся отдельно на каждом узле, использует LRU-вытеснение и наращивает свой размер до указанного лимита постепенно.

table_service_config:
  resource_manager:
    kqp_level_cache_max_size_bytes: 0
    kqp_level_cache_increase_batch_size_bytes: 33554432

resource_manager.kqp_level_cache_max_size_bytes

Тип: uint64
По умолчанию: 0 (кэш отключён)
Описание: Максимальный размер кэша level table векторного индекса в байтах на один узел базы данных. Установка ненулевого значения включает кэш.

resource_manager.kqp_level_cache_increase_batch_size_bytes

Тип: uint64
По умолчанию: 33554432 (32 МиБ)
Описание: Шаг увеличения размера кэша level table. Кэш растёт порциями такого размера до значения kqp_level_cache_max_size_bytes и уменьшается такими же порциями при снижении лимита.

Лимиты памяти выполнения запросов

В подсекции resource_manager задаётся порог спиллинга относительно пула памяти запросов на узле. Размер этого пула регулируется параметрами query_execution_limit_percent / query_execution_limit_bytes в memory_controller_config.

table_service_config:
  resource_manager:
    spilling_percent: 80

resource_manager.spilling_percent

Тип: double
По умолчанию: 80
Описание: Порог заполнения пула памяти запросов, при котором YDB начинает считать спиллинг предпочтительным способом управления памятью. Базой для расчёта служит пул Query Processor, размер которого задаётся query_execution_limit_percent / query_execution_limit_bytes.

Когда суммарное потребление памяти запросами на узле превышает spilling_percent процентов от доступного пула, вычислительные операции, поддерживающие спиллинг (Grace Hash Join, агрегации и др.), получают сигнал выгружать промежуточные данные на диск вместо дальнейшего наращивания потребления RAM.

Например, при значении по умолчанию 80 спиллинг активируется, когда пул запросов заполнен примерно на 80%.

Порог применяется:

Примечание

spilling_percent не задаёт лимит на объём файлов спиллинга на диске. За дисковые квоты отвечает local_file_config.max_total_size в секции spilling_service_config.

Взаимодействие с другими параметрами
Параметр Уровень Роль
query_execution_limit_percent / query_execution_limit_bytes Узел (QP) Размер пула памяти запросов
spilling_percent Запрос / пул Порог заполнения пула, после которого предпочтителен спиллинг
activities_limit_percent Узел Общий лимит памяти для всех компонентов-активностей (QP, компактизация и др.)

spilling_percent определяет, когда пул запросов на узле настолько заполнен, что дальнейший рост в RAM должен уступить место спиллингу. activities_limit_percent ограничивает память активностей в целом и косвенно влияет на доступный объём RAM, но не заменяет пул, относительно которого считается spilling_percent.

Рекомендации
  • Уменьшайте spilling_percent (например, до 70), если нужно раньше переводить тяжёлые запросы на диск и снизить риск исчерпания пула памяти;
  • Увеличивайте spilling_percent (например, до 90), если дисковый спиллинг слишком часто снижает производительность, а на узле достаточно RAM;
  • Согласовывайте spilling_percent с query_execution_limit_percent / query_execution_limit_bytes: при увеличении лимита пула запросов можно поднять порог спиллинга, если на узле достаточно RAM.

spilling_service_config

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

Включение

Спиллинг включён по умолчанию. Следующий параметр управляет включением и отключением сервиса спиллинга.

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

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

table_service_config:
  spilling_service_config:
    local_file_config:
      root: ""
      max_total_size: 21474836480

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

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. Если статические и динамические узлы запускаются под разными пользователями ОС и используют один и тот же root, у обоих пользователей должны быть права на чтение и запись этой директории (например, у категории other права rwx, режим 1777).

Примечание

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

Возможные ошибки
  • 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

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

Связь с memory_controller_config

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

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

Порог спиллинга в resource_manager

Непосредственный порог, при котором вычислительные операции переключаются на спиллинг, регулируется параметром resource_manager.spilling_percent. Он определяет, при каком заполнении пула памяти Query Processor промежуточные данные запроса начинают выгружаться на диск. Размер пула задаётся в memory_controller_config. Подробнее см. раздел Лимиты памяти выполнения запросов.

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

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

Важно

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

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

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

Примечание

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

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

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

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

table_service_config:
  spilling_service_config:
    local_file_config:
      root: ""
      max_total_size: 107374182400   # 100 GiB

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

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

table_service_config:
  spilling_service_config:
    local_file_config:
      root: ""
      max_total_size: 5368709120     # 5 GiB

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

table_service_config:
  spilling_service_config:
    local_file_config:
      enable: true
      root: "/var/spilling"
      max_total_size: 53687091200    # 50 GiB

См. также

Предыдущая
Следующая