В чем смысл n_live_tup
и n_dead_tup
в pg_stat_user_tables
или pgstattuple
?
В чем смысл n_live_tup
и n_dead_tup
в pg_stat_user_tables
или pgstattuple
?
Ответы:
Эти два столбца являются результатом
SELECT pg_stat_get_live_tuples(c.oid) AS n_live_tup
, pg_stat_get_dead_tuples(c.oid) AS n_dead_tup
FROM pg_class c;
Представление количества живых и мертвых строк (кортежей) в таблице.
Найдите эти функции в руководстве .
Мертвые строки - это удаленные строки, которые впоследствии будут повторно использоваться для новых строк из INSERT
s или UPDATE
s (пробел, а не данные). Некоторые мертвые строки (или зарезервированное свободное пространство) могут быть особенно полезны для обновлений HOT (кортежи только для кучи), которые могут эффективно использовать пространство на той же странице данных. Больше на HOT:
Или мертвые строки могут быть удалены VACUUM FULL
(или простыми, VACUUM
если повезет) или подобными операциями над таблицей, соответственно уменьшая физическую таблицу.
Всякий раз, когда строка удаляется или обновляется, старая версия строки становится невидимой для всех других транзакций, начинающихся после ее фиксации. Строка полностью сдохла, как только больше нет незафиксированных старых транзакций. Это необходимо для модели MVCC PostgreSQL для обработки параллелизма.
Это просто статистика . Вам нужно включить сбор статистики, postgresql.conf
если вы хотите, чтобы они обновлялись автоматически. track_counts
по умолчанию должен быть включен. Имейте в виду, что статистика не обновляется мгновенно. Подробнее об этом читайте в руководстве .
SELECT n_live_tup FROM pg_stat_user_tables WHEN relname = 'mytable';
Почему это показывает ноль?mytable
имеет 6 рядов.