Настройка параметров очереди обмена данными
Last updated
Last updated
Параметры для настройки очереди обмена данными расположены в секции ExchangeQueue
в конфигурационном файле Оркестратора.
Параметр | Назначение | Примечание |
---|---|---|
StatisticAvgWindow | Ширина окна сбора средних (сек) | |
StatisticAvgWindowPreCount | Запас создания окон | Внутренний системный параметр для оптимизации. Не рекомендуется менять |
StatisticAvgLastWindowsCount | Количество последних окон, которое отдается в запросе | |
StatisticRecalcInterval | Интервал (мсек) пересчета статистики | |
StatisticBatchSize | Размер пачки, вычитываемой за раз из очереди событий статистики |
События, связанные со статистикой очередей обмена данными (круговая диаграмма в таблице с очередями), регистрируются в реальном времени во внутренней очереди Оркестратора. Обработка этой очереди происходит с периодичностью StatisticRecalcInterval
. За одну итерацию из очереди считывается пачка событий размером StatisticBatchSize
, на основе которой пересчитывается статистика.
Среднее время обработки элемента очереди (разность дат события прочтения элемента и b и последнего события завершения обработки элемента) считается по окну StatisticAvgWindow
. Например, раз в 2 минуты. Окна создаются с запасом StatisticAvgWindowPreCount
при заполнении очередного множества окон. Запрос для построения графика в UI отдаёт последние заполненные окна в размере StatisticAvgLastWindowsCount
.
Параметры для оптимизации чтения из очереди по FIFO приведены ниже.
Параметр | Назначение | Примечание |
---|---|---|
FIFOLocked | Реакция на блокировку (только для Postgres) при извлечении по FIFO. Если задана в настройке очереди, аналогичный параметр берется из БД для очереди | 0 – Пропускаем заблокированные, если все заблокированы - вернется пусто 1 – Пропускаем заблокированные, если все заблокированы - будет ошибка |
FIFORetry | Количество ретраев при извлечении по FIFO при FIFOLocked = 1. Если задан в настройке очереди, аналогичный параметр берется из БД для очереди | |
PrefetchDepth | Глубина предварительной выборки в PrefetchBuffer. Не рекомендуется выше 500. Если 0, PrefetchBuffer не используется (рисунок 46) | Предварительная выборка используется в скоростном режиме. PrefetchBuffer – временный буфер, в который вычитывается сразу несколько элементов очереди из БД, и последующие обращения идут в этот буфер |
PrefetchBufferResetInterval | Интервал (мсек) сброса PrefetchBuffer | Происходит синхронизация вычитанных из PrefetchBuffer элементов с БД |
SpeedModeInterval | Интервал (мсек) между 2-мя последовательными запросами к чтению из очереди по FIFO, определяющий переключение в скоростной режим | PrefetchBuffer используется в скоростном режиме |
PrefetchOffset | Отступ предварительной выборки для PrefetchBuffer. Параметр применяется случайным образом, если он больше 0. Чтобы разные ноды имели более высокий шанс заполнить свой PrefetchBuffer при его одновременном заполнении (для уменьшения вероятности попасть в заблокированные другой нодой элементы очереди) | Зарезервирован для перехода на .NET 7, не используется |
Иллюстрация работы PrefetchBuffer:
В момент запроса t1 очередь еще работает в обычном режиме, запрос обслуживается напрямую в БД.
В момент запроса t2, так как t2 – t1 < SpeedModeInterval
, очередь переходит в скоростной режим, и формируется PrefetchBuffer. Запрос обслуживается этим буфером. Операций в этот момент происходит больше, так как требуется сформировать PrefetchBuffer, но они соизмеримы по времени с обслуживанием запроса t1.
В моменты t3 и t4 очередь уже работает в скоростном режиме и запросы обслуживаются сразу из PrefetchBuffer.
Синхронизация прочитанных в PrefetchBuffer элементов с БД происходит в фоне с периодичностью PrefetchBufferResetInterval
. Эта синхронизация выполняется массово (не одиночные запросы к БД) через внутреннюю очередь.
Условие проверки уникальности натурального ключа (глобального или локального) элемента очереди после его удаления задается булевыми параметрами DeletedNaturalKeysIsGlobalUniqueRequired
и DeletedNaturalKeysIsUniqueRequired
. Если true – удаленный элемент не участвует в проверке уникальности.