4.2.1.2.1.3.7. Защита от переполнения и сокращение журнала транзакций
В базе данных предусмотрен механизм защиты от переполнения и сокращения журнала транзакций.
Угроза переполнения журнала может возникнуть по следующим причинам:
Длительный период высокой нагрузки на систему, в течение которого фоновые процессы по тракту сохранения выполняют обработку содержимого журнала с меньшей интенсивностью в сравнении с интенсивностью сохранения новых записей
Повторяющиеся сбои в работе фоновых процессов
Критически значимыми являются этапы тракта сохранения, выполняющие обращения к диску:
Insert - этап обработки журнала и вставки записей
Flush - этап сохранения на диск
TxCut - этап отсечения начала журнала
Сбои на этих этапах могут привести к тому, что пространство в журнале не будет своевременно освобождаться и использоваться повторно. Во избежание бесконтрольного роста файла журнала предусмотрена возможность определения верхнего предельного уровня размера, по достижении которого приём новых записей от клиентов прекращается.
Кроме того, в случае, когда размер журнала вырос до предельного уровня, после восстановления работы базы данных накопленное содержимое журнала обрабатывается, и в нём высвобождается пространство. В таком случае может быть выполнена операция сокращения размера журнала. Чтобы в результате сокращения в журнале оставалось резервное пространство, предусмотрена возможность определения нижнего предельного уровня размера журнала.
Общая цель этих механизмов - удержание размера журнала в таких пределах, чтобы его пространства хватало на удержание данных по всем секциям ключей с определённым запасом, чтобы сократить частоту (в идеале исключить) операций выделения новых сегментов (рост файла) и сокращения журнала.
Параметры, регулирующие работу механизмов ограничения роста и сокращения журнала, находятся в секции tx настроек работы базы данных:
tx/min - параметры, определяющие нижний предел размера
tx/max - параметры, определяющие верхний предел размера
tx/shrink/auto - флаг включения автоматического сокращения размера файла журнала
Каждый из блоков tx/min и tx/max содержит два параметра:
auto - коэффициент для автоматической оценки значения предела. Его значение имеет следующий смысл: “во сколько раз размер пространства журнала превышает совокупный размер пространства, требуемого для хранения данных по всем секциям ключей” (при вычислении размера требуемого пространства используется значение параметра настроек data/write/chunk_size)
limit - абсолютное значение предела, в мегабайтах
В процессе работы осуществляется мониторинг состояния базы данных и журнала, и вычисляются оценки пределов, которые публикуются в разделе Tx интерфейса мониторинга:
Tx/Size/EstTotal - оценка нижнего и верхнего предела по общему числу секций ключей, в байтах
Tx/Size/EstActive - оценка нижнего и верхнего предела по числу активных секций ключей (по которым в данный момент имеются накапливаемые InMem-фрагменты), в байтах
Также в интерфейсе мониторинга публикуются следующие параметры:
Tx/Size/Limit - заданные в настройках абсолютные значения нижнего и верхнего пределов (поля limit)
Tx/Size/Current - полный размер файла журнала, в байтах
Tx/Size/Used - размер занятого внутреннего пространства журнала, в байтах
Tx/UsedHiBound - верхняя граница используемого пространства журнала (смещение в байтах); размер файла журнала может быть сокращён по данную границу (с учётом выравнивания на сегмента журнала и служебных заголовочных страниц)
Tx/WriteAllowed - признак разрешения записи в журнал
Блокировка добавления записей в журнал для предотвращения роста
Добавление новых записей в журнал доступно только в том случае, если одновременно выполняются следующие условия:
Tx/Size/Used <= Tx/Size/EstTotal/Max (размер используемого пространства не больше оценки верхнего предела по общему числу секций)
Tx/Size/Limit/Max == 0 (абсолютное значение предела не установлено) ИЛИ Tx/Size/Used <= Tx/Size/Limit/Max (размер используемого пространства не больше абсолютного значения предела)
Иначе добавление новых записей в журнал блокируется. Признак разрешения добавления новых записей публикуется в параметре Tx/WriteAllowed.
Автоматическое сокращение размера файла журнала
Значение, публикуемое параметром Tx/UsedHiBound, показывает верхнюю границу наиболее удалённого от начала файла занятого сегмента. Когда размер файла журнала растёт ввиду необходимости выделения новых сегментов, это значение совпадает с размером файла.
Далее, по мере обработки содержимого журнала, ранее занятые сегменты освобождаются для повторного использования. При выборе существующего свободного сегмента для перезаписи приоритет отдаётся сегменту, более близкому к началу файла. Таким образом, когда интенсивность обработки данных приходит в норму после периода высокой нагрузки и роста размера журнала, постепенно освобождаются сегменты в его конце, и начинают циклически перезаписываться сегменты ближе к его началу.
Когда значение Tx/UsedHiBound становится меньше нижней границы размера пространства журнала, выполняется сокращение размера по нижнюю границу. При этом в качестве нижней границы выбирается максимум из:
Tx/Size/EstTotal/Min - автоматически вычисленная оценка нижней границы
Tx/Size/Limi/Min - абсолютное значение, указанное в настройках
При выполнении операции сокращения в журнал выводится соответствующее сообщение.
|