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