Строка таблицы PostgreSQL со временем либо помечается к удалению, и тогда ее нужно удалить, либо становится достаточно старой, и тогда ее нужно «заморозить». Удаление и «заморозка» производятся при сборке мусора. Зачем это нужно знать? Допустим, загружена таблица из 100 миллионов строк. Все работает правильно. Когда строки устаревают в достаточной степени для того, чтобы их «заморозить», следующая команда vacuum или очередное выполнение процесса autovacuum для этой таблицы переписывает каждую строку в целях «заморозки» идентификатора транзакции, интенсивно используя ввод-вывод. Очевидным способом устранения проблемы представляется выполнение команды vacuum после сильной нагрузки на базу данных. Разумеется, это не идеальное решение, и для его реализации может не хватать времени. Многие администраторы по привычке отключают Autovacuum, Поскольку он имеет свойство запускаться в самое неподходящее время. Другое решение описано выше, в разделе «Управление автоматическим обслуживанием базы данных». «Заморозка» происходит, когда идентификатор транзакции строки становится старше на vacuum_freeze_min_age транзакций, чем текущее значение. Обычно при сборке мусора «заморозка» осуществляется в небольших объемах и незаметна. Выше приведен пример, в котором после больших транзакций остается много строк с одинаковыми идентификаторами транзакций, что может вызвать неудобства при «заморозке». Алгоритм Vacuum Спроектирован таким образом, чтобы рассматривались лишь те части таблицы, которым необходима чистка. Когда таблица достигает возраста Vacuum_f reeze_tabie_age, Данная оптимизация уже не применяется, и просматривается вся таблица целиком. При этом обнаруживаются строки, требующие «заморозки». В результате использование ввода-вывода резко возрастает. Попробуем подобрать параметры так, чтобы предотвратить высокую нагрузку при сборке мусора.
Рубрика: Женский интерес