Добавил:
ИВТ (советую зайти в "Несортированное")rnПИН МАГА Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Database 2024 / Books / Мониторинг PostgreSQL.pdf
Скачиваний:
26
Добавлен:
20.11.2024
Размер:
6.87 Mб
Скачать

Глава 8

Очистка

Вэтой главе мы рассмотрим:

что такое очистка и зачем она нужна;

живые и мертвые строки;

фоновый процесс автоочистки;

при каких условиях и как часто выполняется очистка;

как посмотреть очередьтаблиц на обработку;

счетчик транзакций и предотвращение ошибок,связанных с его зацикливанием;

транзакционный горизонт;

как определить количество доступных идентификаторов транзакций;

эффект раздувания;

как определить,насколько раздулисьтаблицы и индексы;

способы отслеживания активных процессов очистки.

Впредыдущих главах рассмотрена часть фоновых процессов СУБД,в этой продолжено их рассмотрение. Глава посвящена процессу очистки, более известной как очистка (vacuum). Далее втекстеябудуиспользоватьтермин«очистка»,подразумеваяобаеговарианта,какручной,так и автоматический; в контексте автоматической очистки будет использоваться термин «автоочистка».

Очистка представляет собой реализацию сборщика мусора (garbage collector) и является важной частью СУБД. Ее эффективная работа напрямую влияет на производительность. В этой главе в необходимом объеме будет рассмотрен механизм очистки, аспекты его работы,требующие отслеживания и,конечно же,необходимые для мониторинга инструменты СУБД.

8.1. Введение в очистку

Чтобы обеспечить высокую производительность конкурентной работы клиентов при значи-

тельныхнагрузках,PostgreSQLреализуетмодельMVCC1 (MultiversionConcurrencyControl).Эта модель минимизирует количество блокировок и позволяет читающим процессам не блокировать пишущие,а пишущим—читающие.

1 momjian.us/main/writings/pgsql/mvcc.pdf

196Глава 8. Очистка

При выполнении запросов и транзакций СУБД оперирует снимками (snapshot). Снимок определяетвидимоедлятранзакциисостояниеданныхивключаеттолькозафиксированныенамомент создания снимка изменения, а момент создания выбирается исходя из установленного уровня изоляции (isolation level) транзакций. Конкурентное выполнение транзакций (и запросов)предполагаетсуществованиенесколькихснимков,врамкахкоторыхможетосуществляться не только чтение,но и изменение данных.

Вмодели MVCC PostgreSQL строки не изменяются на месте (in-place); вместо этого различные операции выполняютдействия с версиями строк:

операция INSERT вставляет первую версию новой строки;

операция UPDATE вставляетновую версию строки,а предыдущую версию отмечаеткак удаленную;

операция DELETE отмечает версию строки как удаленную.

Таким образом, для одной и той же строки может существовать несколько версий — одна актуальная,она же живая (live),и,возможно,несколько мертвых (dead).Строки,помеченные как удаленные, продолжают некоторое время храниться в тех же страницах и файлах данных, поскольку все еще могутпотребоватьсядругим активнымтранзакциям (то естьвходятв снимки, используемые этимитранзакциями).В случае высокой активности на запись может появляться все больше и больше версий строк, помеченных удаленными, что сказывается на размерах таблиц и индексов.С постепенным завершениемтранзакций мертвые строки в конечном счете становятся не нужными ни одной изтранзакций,и их можно безопасно удалить,освободив местодля новых строк.Более подробно о работе механизма MVCC можно прочитатьв соответ-

ствующей главе книги The Internals of PostgreSQL1.

Постепенностановясьненужными,мертвыеверсиистрокпродолжаютзаниматьпространство в страницах, что приводит к избыточным операциям ввода-вывода и расходу ресурсов, которого хотелось бы избежать. Так перед СУБД возникает необходимость в удалении устаревших версийстрок,которыебольшеникомуненужны.Этойзадачейизанимаетсяочистка.Вранних версиях PostgreSQL очистка была реализована в виде отдельной команды VACUUM, которую администратор был должен запускать вручную или с помощью внешнего планировщика задач (обычно cron). Помимо очистки, у команды VACUUM есть несколько дополнительных функций: сбор статистики планировщика, полная блокирующая очистка, заморозка строк и др. Больше информации о работе команды очистки можно узнать из документации2. Впоследствии была реализована автоматическая версия очистки в виде фоновых процессов, запускающихся по необходимости.

Первый процесс автоочистки autovacuum launcher поддерживает список баз данных и принимает решение, когда нужно запустить очистку в конкретной базе. Когда в этом возникает необходимость, autovacuum launcher отправляет сигнал головному процессу postmaster, и тот,

1 www.interdb.jp/pg/pgsql05.html

2 postgrespro.ru/docs/postgrespro/15/sql-vacuum

Соседние файлы в папке Books