- 2020-09-24: Release notes
- Оптимизация хранения и производительности за счет дедупликации в B-tree индексах.
- Улучшение производительности запросов с использованием агрегатов или работающих с партицонированными таблицами.
- Улучшенное планирование запросов с использованием расширенной статистики.
- Параллельное вакуумирование индексов.
- Инкрементальная сортировка.
- дубликаты элементов в индексах есть всегда и это ОК.
- дубликаты это плохо, т.к. расходуется место, IO, влияет на latency запросов.
- дедупликация объединяет группы дубликатов тем самым устраняя их.
- срабатывает при вставке элемента в случае если она не помещается в страницу
- вставка происходит в отдельный список тем самым избегая (либо откладывая) page split (и увеличение индекса)
- профиты:
- индекс занимает меньше места
- быстрый обход индекса, меньше IO, меньше latency
- меньше bloat
- применяемость:
- проектировалось для смешанной read-write нагрузки
- не подходит для write-heavy нагрузки с отсутствующей или небольшой вероятностью возникновения дубликатов (append-only), может быть небольшой performance penalty
- бессмысленно для read-only нагрузки, при этом нет performance penalty, т.к. с точки зрения IO чтение списка эквивалентно чтению обычной страницы индекса
- ограничения:
- может быть небезопасно при использовании с типами text, varchar и char и при использовании nondeterministic таблиц сравнения.
- не может использоваться с типами numeric, jsonb, float4, float8
- не может использоваться с композитными типами вроде arrays, ranges (может быть устранено в будущих версиях)
- не может использоваться с INCLUDE индексами
- настройка через storage параметр
deduplicate_items
, по-умолчанию - включено.
- Расширение случаев применения pruning техники.
- Расширение случаев использования partitionwise joins операции.
- отключено по-умолчанию, то есть нужно заранее представлять под какие запросы это следует включать и что это действительно будет полезно.
- CREATE STATISTICS
- Добавлена поддержка
statistics target
. - Добавлена возможность пользоваться несколькими статистиками в одном запросе.
- Добавлена поддержка статистики для OR условий и константных списков IN/ANY.
- поддержка параллельной обработки индексов для VACUUM.
- необходимо в команде VACUUM указать ключевое слово PARALLEL n, где n - количество воркеров.
- сортировка только тех строк для которых это действительно необходимо (для случаев когда часть строк была отсортирована в других узлах запроса).
- можно контролировать через enable_incremental_sort, по-умолчанию включено.
- меньше утилизация CPU, меньше latency
партиционирование:
- частичная поддержка row-level BEFORE триггеров.
- поддержка логической репликации через механизм публикаций
- поддержка логической репликации в партиционированные таблицы на стороне подписчика
Отслеживание и запуск авто-вакуума для insert-only таблиц (row freezing, visibility maps)
Поддержка изменения параметров primary_conninfo
, primary_slot_name
через reload конфигурации.
- полезно для перестроения схем репликации.
Поддержка ограничений при хранении WAL сегментов при использовании слотов репликации.
Параметр wal_keep_segments
переименован в wal_keep_size
.
Добавлена функция gen_random_uuid()
для генерации UUIDv4.
- производительность mixed read/write нагрузки за счет дедупликации в индексах
- производительность запросов с участием партиционированных таблиц
- расширение функциональности extended статистики