71.7. Кортежи только в куче (HOT)#
71.7. Кортежи только в куче (HOT)
Чтобы обеспечить высокую параллельность, Tantor SE использует многоверсионный контроль параллелизма (MVCC) для хранения строк. Однако MVCC имеет некоторые недостатки для запросов на обновление. В частности, обновления требуют добавления новых версий строк в таблицы. Это также может потребовать создания новых записей индекса для каждой обновленной строки, а удаление старых версий строк и их записей индекса может быть затратным.
Для снижения издержек при обновлении, Tantor SE имеет оптимизацию, называемую кучей только кортежей (HOT). Эта оптимизация возможна, когда:
Обновление не изменяет ни одну из колонок, на которые ссылаются индексы таблицы, включая выражения и частичные индексы.
В странице, содержащей старую строку, достаточно свободного места для обновленной строки.
В таких случаях, кучные кортежи обеспечивают две оптимизации:
Новые записи индекса не требуются для представления обновленных строк.
Во время нормальной работы, включая
SELECT
, старые версии обновленных строк могут быть полностью удалены, вместо того чтобы требовать периодических операций очистки. (Это возможно, потому что индексы не ссылается на свои идентификаторы элементов страницы).
В итоге, обновления только кучи могут быть созданы
только если столбцы, используемые индексами, не обновляются. Вы можете
увеличить вероятность достаточного пространства на странице для
HOT обновлений, уменьшив fillfactor
таблицы.
Если вы этого не сделаете, HOT обновления все равно произойдут, потому что
новые строки естественно перейдут на новые страницы и существующие страницы с
достаточным свободным пространством для новых версий строк. Системное представление pg_stat_all_tables
позволяет отслеживать наличие HOT и не-HOT обновлений.