Настройка параметров очереди обмена данными
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 – удаленный элемент не участвует в проверке уникальности.