Перейти к основному содержимому

ru-ru.STORAGE-HOT)=

Кортежи только в куче (Heap-Only Tuples, HOT)

примечание

Эта страница переведена нейросетью GigaChat.

Для обеспечения высокой степени параллелизма, PostgreSQL использует многоверсионный контроль конкурентности (MVCC) для хранения строк. Однако у MVCC есть некоторые недостатки для запросов обновления. В частности, обновления требуют добавления новых версий строк в таблицы. Это также может потребовать создания новых записей индекса для каждой обновленной строки, а удаление старых версий строк и их записей индекса может быть дорогостоящим.

Чтобы помочь уменьшить накладные расходы при обновлении, PostgreSQL имеет оптимизацию под названием «кортежи только в куче» (HOT). Эта оптимизация возможна, когда:

  • Обновление не изменяет ни одну из колонок, на которые ссылаются индексы таблицы, включая выражения и частичные индексы.

  • На странице, содержащей старую строку, достаточно свободного места для обновленной строки.

В таких случаях кортежи только для куч обеспечивают две оптимизации:

  • Новые записи индекса не требуются для представления обновленных строк.

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

Вкратце, обновления только для куч можно создавать, только если не обновляются столбцы, используемые индексами. Необходимо увеличить вероятность достаточного пространства страницы для HOT обновлений путем уменьшения fillfactor таблицы. Если этого не сделать, HOT обновления все равно будут происходить, потому что новые строки естественным образом перейдут на новые страницы и существующие страницы с достаточным свободным пространством для новых версий строк. Представление системы pg_stat_all_tables позволяет отслеживать возникновение HOT и не-HOT обновлений.