linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it worksскоро
  • Уроки
  • База знаний
  • Собеседование
home/postgres/lessons/pg-lab-14-2-vacuum-verbose

lesson ── postgres-labs ── ~20 мин ── 4 шагов

Прочитай отчёт VACUUM VERBOSE построчно

VACUUM умеет рассказывать о себе - надо лишь добавить VERBOSE. Этот отчёт читают первым делом, когда жалуются на раздувание. Сейчас ты разберёшь его построчно: сколько версий удалено, сколько осталось, сколько «dead but not yet removable» и что такое removable cutoff.

▶ интерактивный sandbox

Поднимется контейнер postgreslab/postgres-base с PostgreSQL 17 и psql. В браузере откроется терминал, база lab уже настроена. Каждый шаг проверяется автоматически. Сеть air-gapped, наружу контейнер не ходит.

запустить sandbox →

stack ── PostgreSQL 17 · psql · 1 GB RAM · air-gapped · самоуничтожается через 45 мин простоя

Шаги

  1. 01

    Наплоди мёртвые версии

    sql
    UPDATE bloat_demo SET payload = repeat('q', 200);
    SELECT dead_tuple_count FROM pgstattuple('bloat_demo');

    Теперь в таблице есть что убирать. Запомни число мёртвых версий - сверишь его с отчётом VACUUM.

    ✓ Мёртвые версии готовы — есть материал для отчёта.

  2. 02

    Запусти VACUUM VERBOSE и найди removable cutoff

    sql
    VACUUM (VERBOSE) bloat_demo;

    В выводе ищи строку про removable cutoff - это граница удаления, выраженная числом xid. Всё, что старше неё и закоммичено, удаляемо. Рядом - её возраст в XID: большой возраст означает застрявший горизонт.

    подсказка

    VERBOSE печатает отчёт как INFO-сообщения прямо в psql.

    ✓ Ты увидел removable cutoff — горизонт уборки числом.

  3. 03

    Найди, сколько версий удалено

    В отчёте есть строка вида tuples: N removed, M remain, K are dead but not yet removable. Прогони VACUUM ещё раз на свежем мусоре и найди число удалённых.

    sql
    UPDATE bloat_demo SET payload = repeat('w', 200);
    VACUUM (VERBOSE) bloat_demo;

    N removed - убранные мёртвые версии, M remain - живые, K ... not yet removable - мёртвые, но новее cutoff.

    ✓ Строка про удалённые версии найдена и понятна.

  4. 04

    Разбери строку «dead but not yet removable»

    Эта часть строки - индикатор горизонта. Если число ненулевое, в базе висит транзакция, мешающая уборке. Сейчас, без долгих транзакций, оно должно быть нулевым:

    sql
    VACUUM (VERBOSE) bloat_demo;

    Самостоятельно (на досуге) открой долгую транзакцию во второй сессии и убедись, что это число вырастет - именно так в проде ловят виновника раздувания.

    ✓ Ты прочитал ключевую строку отчёта целиком.

Что ты узнал

VACUUM VERBOSE печатает отчёт об уборке: число удалённых и оставшихся версий, «dead but not yet removable» как индикатор горизонта и removable cutoff - границу удаления в виде xid.

команды

  • VACUUM (VERBOSE) bloat_demo;уборка с подробным отчётом
  • SELECT dead_tuple_count FROM pgstattuple('bloat_demo');живой замер мёртвых версий

концепции

  • · removable cutoff — горизонт уборки, выраженный числом xid
  • · «dead but not yet removable» ненулевое — ищи долгую транзакцию
  • · removed/remain показывают, сколько мусора реально ушло

← предыдущая

Заставь долгую транзакцию держать мусор всей базы

следующая →

Состарь таблицу и продвинь relfrozenxid заморозкой

Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки