Автоочистка и секционированные таблицы

Postgres doc говорит, что секционированные таблицы не обрабатываются автоочисткой. Но все же я вижу, что столбец last_autovacuum из pg_stat_user_tables заполнен последними временными метками для живых разделов.

Означает ли это, что эти временные метки устанавливаются фоновым рабочим процессом, который только предотвращает перенос идентификатора транзакции без фактического выполнения ANALYZE&VACUUM? Или что-то еще, что может их заполнить?

Кроме того, учитывая, что разделы большие и достаточно активные, должен ли я вручную запускать ANALYZE и VACUUM на этих разделах? Если да, имеет ли значение порядок?

ОБНОВИТЬ

Я пытаюсь уточнить, благодаря данным комментариям.

  1. Взятие этого вакуума должно работать на партиции так же, как и на обычную таблицу, что может быть причиной гораздо более быстрого роста занимаемого дискового пространства после партиции? До разделения это была почти линейная функция количества записей.

  2. Что также сбивает с толку, при поиске запущенных процессов автоочистки я вижу, что те, которые связаны с разделами, обозначены как «для предотвращения переноса», а другие - нет. Это абсолютное совпадение или есть что проверить?

  3. Документация описывает секционированную таблицу скорее как виртуальную сущность без собственного хранилища. Какой смысл указывать, что он не пропылесосен?

Где вы нашли эту информацию? Каждый стол будет пропылесосен, когда возникнет необходимость

Frank Heikens 04.10.2022 19:54

@FrankHeikens, прямо здесь: postgresql.org/docs/current/routine-vacuuming.html Многораздельные таблицы не обрабатываются автоочисткой. Статистику следует собирать, запуская АНАЛИЗ вручную при первом ее заполнении и повторно всякий раз, когда распределение данных в ее разделах значительно изменяется.

user3714601 04.10.2022 19:59

Разделы очищаются и анализируются как обычно. Это не только родительская таблица.

jjanes 04.10.2022 20:10

Раздел очищается, когда данные изменились, когда в этом есть необходимость. Это не делается из-за вакуума в родителях. Это разные таблицы. И да, один может быть родителем, а другой ребенком

Frank Heikens 04.10.2022 20:15

@FrankHeikens, большое спасибо за ваши комментарии. Могу я попросить вас взглянуть на обновление выше?

user3714601 04.10.2022 20:50

@jjanes большое спасибо за ваши комментарии. Могу я попросить вас взглянуть на обновление выше?

user3714601 04.10.2022 20:51

Для номера 2 нам нужно гораздо больше информации, а номер 3 противоположен тому, что я могу найти в документации.

Frank Heikens 04.10.2022 21:00

@FrankHeikens, цитата из документации (postgresql.org/docs/current/ddl-partitioning.html): сама секционированная таблица — это «виртуальная» таблица, не имеющая собственного хранилища. Вместо этого хранилище принадлежит разделам, которые в остальном являются обычными таблицами, связанными с секционированной таблицей.

user3714601 04.10.2022 21:23

Родительская таблица пустая, виртуальная. Но все еще нуждается в вакууме время от времени, чтобы избежать обертывания. автоматический пылесос позаботится об этом. Разделы будут чаще очищаться при изменении данных. Но какую проблему вы пытаетесь решить?

Frank Heikens 04.10.2022 21:57

@FrankHeikens, (1), гораздо более быстрый рост занимаемого дискового пространства по сравнению с неразделенной версией.

user3714601 04.10.2022 22:46

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

Frank Heikens 04.10.2022 22:50

Какой раздел растет? Все они? Используйте pgstattuple, чтобы увидеть, много ли мертвого или свободного места. Возможно, кто-то принял разделение в ожидании значительного увеличения активности, и теперь это увеличение произошло.

jjanes 05.10.2022 00:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
12
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Утверждение из документации верно, но вводит в заблуждение. Autovacuum обрабатывает не саму секционированную таблицу, а разделы, которые являются обычными таблицами PostgreSQL. Итак, мертвые кортежи удаляются, карта видимости обновляется и так далее. Короче говоря, в отношении уборки не о чем беспокоиться. Помните, что сама секционированная таблица не содержит никаких данных!

Документация предупреждает вас о том, что ANALYZE. Autovacuum также запускает автоматические задания ANALYZE для сбора точной статистики таблиц. Это будет нормально работать на секциях, но для самой секционированной таблицы статистика не собирается, поэтому вам нужно запустить ANALYZE вручную для секционированной таблицы, чтобы получить эти данные. На практике я считаю, что это не проблема, так как оптимизатор все равно генерирует планы для каждого отдельного раздела, и там у него есть точная статистика.

Спасибо! Есть ли возможность исправить/дополнить эту часть документа? Я совершенно уверен, что все мои коллеги прочитали его так же, т.е. неправильно.

user3714601 05.10.2022 09:10

Я предложил патч документации.

Laurenz Albe 05.10.2022 10:39

Другие вопросы по теме