Яке значення 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;
Представляючи кількість живих та мертвих рядків (кортежів) у таблиці.
Знайдіть ці функції в посібнику .
Мертві рядки видаляються рядками, які згодом будуть використані для нових рядків з INSERTs або UPDATEs (пробіл, а не дані). Деякі мертві рядки (або зарезервоване вільне місце) можуть бути особливо корисними для оновлень HOT (Тільки для Heap), які можуть ефективно використовувати простір на одній сторінці даних. Більше про HOT:
Або мертві рядки можуть бути видалені VACUUM FULL(або звичайними, VACUUMякщо пощастить) або подібними операціями на столі, тим самим скорочуючи фізичну таблицю відповідно.
Щоразу, коли рядок видаляється або оновлюється, стара версія рядка стає непомітною для всіх інших транзакцій, починаючи після здійснення транзакції. Рядок повністю загинув, як тільки не буде більше незапущених старих транзакцій. Це необхідно для того , щоб модель MVCC PostgreSQL обробляла паралельність.
Це лише статистика . Вам потрібно включити збір статистики, postgresql.confякщо ви хочете, щоб вони автоматично оновлювалися. track_countsАле він повинен бути включений за замовчуванням. Майте на увазі, що статистика не оновлюється миттєво. Детальніше про це читайте в посібнику .
SELECT n_live_tup FROM pg_stat_user_tables WHEN relname = 'mytable';Чому він показує нуль?mytableмає 6 рядів.