Оптимизация работы с базой данных

Вы можете пропусить этот раздел при первичной настройке системы.

При обсчёте сессий в реальном режиме времени происходит значительная нагрузка на базу данных. Постоянно обновляются таблицы log_session, session_detail, session_account, contract_balance, contract_account.

В таблицу session_detail_<mid>_yyyyMM производится запись объёма потреблённых по ходу сессии услуг с разбивкой по часам. Возможно снизить число обновлений таблицы, отменив запись по некоторым тарифицируемым по нулевой стоимости и не нужных услуг (например, время при тарификации трафик). Также возможно сгруппировать записи, например, по суткам, если тарифные планы не предполагают различную стоимость услуг по времени суток. Правила "свёртки" таблицы session_detail определяются в конфигурации модуля следующим образом:

detail.compress.<sid>.<hour_range>=<rule>

Где:

  • <sid> - числовой код услуги, запись о которой вносится в session_detail;

  • <hour_range> - диапазон часов, к которым относится правило;

  • <rule> - ключевое слово SKIP (пропуск обновления), либо час, в который преобразуется реальный час вносимой записи.

Например, для отброса записи в session_detail информации об услуге Время с кодом 2 и свёртке по суткам записей по наработке по услугам трафиков 23 и 24 определяются следующие правила:

detail.compress.2.0-23=SKIP
detail.compress.23.0-23=0
detail.compress.24.0-23=0

В случае, если стоимость трафика изменяется от времени суток, возможно преобразование реального часа потребления услуги в час начала диапазона.

При безлимитных тарифах жёсткое фиксирование посчитанного по нулевой цене трафика в session_detail не обязательно, информация может быть сохранена в конце часа, либо сессии. Так же не требуется постоянное обновление таблицы log_session (стоимость сессии и время её окончания). Для включения отложенного обновления таблиц session_detail и log_session возможно определение в узле Конфигурация тарифного плана следующих правил:

session_detail.delayed.update=1
log_session.delayed.update=1

При необходимости можно добавить только одну из строк.

Установка опции в значение 0, равно как и в любое другое, не отключает ее! Для отключения необходимо удалить, либо закомментировать строку символом # в начале строки.

На снимке экрана ниже изображён узел в тарифном плане.

images/download/attachments/43385746/x_404.gif

images/download/attachments/43385746/x_405.gif

Отложенное обновление таблицы log_session может происходить только при нулевом приращении стоимости сессии. Отложенное обновление таблицы session_detail при ненулевых тарифных планах также возможно, однако следует учитывать следующие нюансы:

  • При обсчёте трафика по RADIUS-атрибутам при перезагрузке BGRadiusDialup произойдёт потеря трафика, при восстановлении сессии средства за этот трафик будут начислены повторно;

  • При тарификации трафика по NetFlow-данным в случае перезагрузки BGRadiusDialup произойдёт просто потеря накопленного счётчике в памяти трафика;

  • При использовании тарифов с узлом Диапазон наработки инициализация тарифа при старте сессии происходит по таблице session_detail, при нескольких параллельных сессиях одного договора возможна несколько некорректная тарификация. Тариф будет инициализироваться недостаточной наработкой. Проблема может быть решена переобсчётом в конце месяца всех сессий.