Postgres Pro Enterprise 13
Редакции и возможности
13
Авторские права
© Postgres Professional, 2023 год.
Авторы: Алексей Береснев, Илья Баштанов, Павел Толмачев
Использование материалов курса
Некоммерческое использование материалов курса (презентации,
демонстрации) разрешается без ограничений. Коммерческое
использование возможно только с письменного разрешения компании
Postgres Professional. Запрещается внесение изменений в материалы
курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу:
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за
любые повреждения и убытки, включая потерю дохода, нанесенные
прямым или непрямым, специальным или случайным использованием
материалов курса. Компания Postgres Professional не предоставляет
каких-либо гарантий на материалы курса. Материалы курса
предоставляются на основе принципа «как есть» и компания Postgres
Professional не обязана предоставлять сопровождение, поддержку,
обновления, расширения и изменения.
2
Темы
Продукты Postgres Professional и редакции Postgres Pro
Возможности Postgres Pro Enterprise
3
Продукты и редакции
Редакции Postgres Pro
Лицензионная политика
Другие продукты Postgres Professional
4
Редакции Postgres Pro
Standard
Certified
Enterprise
Enterprise Certified
Postgres Pro поставляется в различных редакциях.
Standard – доработанная версия базового PostgreSQL с некоторыми
дополнительными расширениями. Это основной выбор для клиентов,
которых устраивают базовые возможности, но которым необходима
техподдержка:
Enterprise – существенно доработанная версия PostgreSQL
c функциональностью, предназначенной для высоконагруженных
систем в больших компаниях:
Обе редакции имеют сертифицированные ФСТЭК версии, которые
могут применяться для хранения персональных данных и
конфиденциальной информации:
Начиная с версии 15, ОС Windows не поддерживается Postgres Pro,
но компания собирает обычный PostgreSQL под Windows. Сборка
содержит программу-установщик.
В этом курсе, если не указано иное, мы рассматриваем возможности
Postgres Pro Enterprise.
5
Лицензионная политика
Лицензирование по количеству ядер
в стоимость лицензии входит годовая техническая поддержка
редакция Standard бесплатна для образовательных учреждений
Для 1С возможно лицензирование по количеству серверов
и пользователей
Postgres Pro лицензируется по количеству ядер. В стоимость лицензии
входит один год технической поддержки.
Редакция Postgres Pro Standard может бесплатно использоваться
образовательными учреждениями.
Все редакции Postgres Pro поддерживают работу с 1С: в состав входят
все необходимые расширения (fasttrun, fulleq, mchar, online_analyze),
а ядро включает оптимизации производительности (например,
временные таблицы не требуют ввода-вывода, пока помещаются
в отведенной оперативной памяти).
При использовании Postgres Pro для работы с 1С можно выбрать
другую модель лицензирования – по количеству серверов и
пользователей.
Дополнительно в компании можно заказать услуги технической
поддержки, миграции, аудита информационных систем:
Подробную информацию по стоимости, срокам лицензии и по вопросам
предоставления услуг можно узнать, написав на sales@postgrespro.ru
6
Другие продукты
Postgres Pro Enterprise Manager
интегрированная панель управления
централизованный интерфейс мониторинга и администрирования
Postgres Pro Backup Enterprise
утилита резервного копирования и восстановления pg_probackup
(рассматривается в этом курсе)
Postgres Pro Shardman
распределенная отказоустойчивая СУБД с ACID-гарантиями
горизонтальное масштабирование по чтению и записи
Кроме СУБД Postgres Pro, компания Postgres Professional предлагает
ряд других продуктов.
Postgres Pro Enterprise Manager – интегрированная административная
панель управления для Postgres Pro Enterprise. Предоставляет
централизованный интерфейс мониторинга и управления СУБД.
Postgres Pro Backup Enterprise – утилита pg_probackup для управления
резервным копированием и восстановлением кластеров баз данных
PostgreSQL. Утилита работает с обычным PostgreSQL и со всеми
редакциями Postgres Pro, но в сочетании с Postgres Pro Enterprise
поддерживает CFS и хранение резервных копий в S3-хранилище.
Утилита входит в состав Postgres Pro Enterprise и рассматривается
в этом курсе.
Postgres Pro Shardman – распределенная отказоустойчивая СУБД на
базе PostgreSQL. Shardman не основан на Postgres Pro, но использует
многие ее возможности (сбор статистики, аудит, сжатая файловая
система).
7
Установка и миграция
Поддержка локалей ICU на уровне кластера и БД
Замена нулевого байта в COPY FROM
nul_byte_replacement_on_import
oracle_fdw
обертка сторонних данных для Oracle
orafce
популярные функции из пакетов Oracle
Тема 2. Установка,
настройка, обновление
Postgres Pro Enterprise позволяет указывать локаль провайдера ICU
при инициализации кластера и при создании базы данных. PostgreSQL
поддерживает эту возможность начиная с версии 15.
Команда COPY FROM может обрабатывать начальные нулевые байты,
которые могут появиться при выгрузке данных из других СУБД.
Поведение регулируется параметром nul_byte_replacement_on_import.
Для облегчения миграции с Oracle в Postgres Pro Enterprise добавлены
два сторонних расширения:
oracle_fdw — обертка сторонних данных для Oracle;
orafce — распространенные функции из пакетов Oracle.
8
Транзакции и сеансы
Управление транзакциями и сеансами
9
Транзакции и сеансы
64-разрядный счетчик транзакций
Автономные транзакции
Встроенный пул соединений
сохраняет контекст сеанса
Тема 3. Управление
транзакциями
32-битные идентификаторы транзакций в PostgreSQL создают
проблемы с обслуживанием переполнения счетчика транзакций.
в нагруженных системах. В Postgres Pro Enterprise используются 64-
битные идентификаторы, упрощающие администрирование.
Автономные транзакции позволяют зафиксировать или откатить часть
операторов независимо от статуса основной транзакции.
В обычном режиме работы сервера каждое подключение
обслуживается отдельным процессом, что уменьшает эффективность
совместной работы. В Postgres Pro Enterprise реализован встроенный
пул соединений, сохраняющий окружения сеансов.
10
Данные в памяти
pg_variables
переменные в памяти сеанса
in_memory
небольшие таблицы в общей памяти
Расширение pg_variables позволяет работать с переменными
различных типов в памяти сеанса. Расширение несовместимо с пулом
соединений, включая встроенный пул Postgres Pro.
С помощью расширения in_memory можно размещать небольшие
таблицы в общей памяти сервера. Работа с таблицей происходит
с помощью обертки сторонних данных.
11
Сеансы и подключения
pgbouncer — сторонний пул соединений
Параметры libpq для подключения к разным серверам
hostorder, failover_timeout
Отключение сеансов и переподключение
idle_session_timeout, reusepass
Функции для изменения параметров других сеансов
pg_backend_set_config, pg_backend_load_library
Помимо встроенного пула соединений, в Postgres Pro включен
сторонний пул соединений pgbouncer. Работа с pgbouncer с точки
зрения разработчика приложений рассматривается в курсе DEV2.
Доработанный протокол libpq позволяет распределять сеансы по
нескольким серверам:
hostorder — порядок подключения к серверам (sequential/random);
failover_timeout — максимальное время для циклического
переподключения к узлам, указанным в строке соединения.
Два новых конфигурационных параметра:
idle_session_timeout — завершает любые сеансы, простаивающие
дольше заданного времени вне открытой транзакции;
reusepass разрешается ли использовать запрошенный пароль при
повторном установлении подключения (запрет автоматического
переподключения).
Добавлены функции pg_backend_set_config и pg_backend_load_library,
позволяющие менять параметры других сеансов и загружать в них
библиотеки.
12
Приоритизация ресурсов
Приоритеты сеансов в отношении ресурсов
session_cpu_weight — использование процессора
session_ioread_weight — объем чтения
session_iowrite_weight — объем записи
Фоновый процесс собирает статистику использования
ресурсов сеансами
usage_tracking_interval = 0 — интервал сбора
В высоконагруженных системах возникает потребность неравномерного
распределения ограниченных ресурсов между сеансами. В обычной
версии PostgreSQL такого механизма нет.
В Postgres Pro Enterprise можно назначить сеансам приоритеты
в отношении трех видов ресурсов:
использование процессора;
объем чтения (страницы локального и общего кешей);
объем записи (страницы локального и общего кешей).
Использование ресурсов процессами определяется на основе
статистики, собираемой отдельным фоновым рабочим процессом.
Интервал сбора статистики задается параметром
usage_tracking_interval. По умолчанию его значение равно 0, при этом
статистика не собирается и приоритизация отключена.
13
Хранение данных
Возможности, связанные с хранением данных в файлах
14
Сжатая файловая система
CFS — Compressed File System
включается для отдельных табличных пространств
позволяет сжать данные в несколько раз
сокращает объем дискового ввода-вывода
измененные страницы записываются последовательно
Тема 4. CFS – сжатая
файловая система
Использование сжатой файловой системы (Compressed File System,
CFS) позволяет сократить объем дискового ввода-вывода за счет
хранения сжатых блоков данных и улучшить кучность хранения за счет
последовательной записи сжатых блоков в конец файла на диске.
Механизм CFS включается на уровне отдельных табличных
пространств.
Как правило, сжатие позволяет уменьшить объем хранимых данных
в несколько раз.
15
Хранение данных
TOAST для системного каталога
для столбцов со списками управления доступом
pg_transfer
быстрое перемещение таблиц между серверами
pg_repack
устранение раздувания таблиц и индексов
Таблицы системного каталога, содержащие потенциально длинные
списки управления доступом (Access Control List), такие как pg_class
и pg_attribute, могут использовать TOAST.
С помощью расширения pg_transfer можно специальным образом
подготовить таблицу, содержащую много данных, и затем быстро
переместить ее на другой экземпляр Postgres Pro простым
копированием файлов данных. Расширение выполняет необходимые
для этого корректировки системного каталога.
В Postgres Pro Enterprise включена сторонняя утилита pg_repack,
которая позволяет избавиться от раздувания таблиц и индексов без
установки исключительной блокировки на все время работы, как того
требует команда VACUUM FULL.
16
Повреждения данных
amcheck
контроль целостности
добавлена проверка уникальности индексов
pg_filedump
низкоуровневый просмотр файлов данных
Просмотр всех версий строк
функция pg_snapshot_any для отключения правил видимости
Postgres Pro Enterprise включает дополнительные средства для
контроля целостности, отладки и исследования поврежденных данных.
Штатное расширение amcheck, позволяющее проверять целостность
данных, доработано для проверки ограничений уникальности
в B-деревьях.
Утилита pg_filedump выводит содержимое файлов таблиц и индексов,
а также управляющего файла в отформатированном виде. Это может
быть полезно для исправления поврежденных данных.
Функция pg_snapshot_any выводит все версии строк таблицы, отключая
правила видимости.
17
Запросы
Выполнение и оптимизация запросов
18
Оптимизация запросов
dump_stat — перенос статистики планировщика
pg_query_state — состояние выполняющегося запроса
pg_hint_plan — указания оптимизатору
plantuner — запрет определенных индексов
AQO — адаптивная оптимизация запросов
накопление статистики выполнений и коррекция прогноза
кардинальности
Тема 5. Оптимизация
запросов
Тема 6. Адаптивная
оптимизация
Расширение dump_stat позволяет после восстановления из логической
копии обойтись без выполнения команды ANALYZE для всего кластера,
что для больших БД может значительно сократить время простоя.
Расширение pg_query_state позволяет узнать текущее состояние
выполнения запросов.
Расширение pg_hint_plan позволяет управлять планом выполнения
запроса с помощью специальных указаний.
Расширение plantuner позволяет скрывать определенные индексы от
планировщика, не удаляя их.
Расширение AQO (Adaptive Query Optimization) используется для
адаптивной оптимизации запросов за счет коррекции прогноза
кардинальности с учетом накопленной статистики выполнения
запросов.
19
Планировщик запросов
Удаление замкнутых соединений из планов
enable_self_join_removal
Оптимизированы планы с пустыми узлами Materialize
Уточнение стоимости последовательного сканирования
seq_scan_startup_cost_first_row = off
Уточнение селективности соединений по нескольким
условиям при наличии расширенной статистики
enable_compound_index_stats = on
Уменьшено потребление памяти планировщиком
в запросах с большими массивами
Добавлена возможность удаления замкнутых соединений из планов
запросов, что может увеличить скорость выполнения (параметр
enable_self_join_removal). Полезно для систем с автоматически
генерируемыми запросами.
Улучшена производительность в случаях, когда в плане возникает
много пустых узлов Materialize, которые ничего не возвращают.
Параметр seq_scan_startup_cost_first_row увеличивает начальную
стоимость последовательного сканирования. В обычном PostgreSQL
эта величина всегда равную нулю, за счет чего планировщик может
иногда предпочесть последовательное сканирование доступу по
индексу для получения одной строки по первичному ключу.
При включенном параметре enable_compound_index_stats оптимизатор
использует составные индексы для уточнения оценки селективности
соединения по нескольким атрибутам, не составляющим внешний ключ
(в PostgreSQL в этом случае перемножаются селективности по
отдельным колонкам).
Добавлена оптимизация, которая уменьшает потребление памяти
планировщиком на запросах, содержащих большие массивы
(например, IN для проверки вхождения значения в массив).
20
Выполнение запросов
Управление объемом кеша для подготовленных операторов
plan_cache_lru_memsize, plan_cache_lru_size
Режим автоподготовки операторов
autoprepare_threshold, autoprepare_limit, autoprepare_memory_limit
Поиск ближайших соседей для B-tree, GiST и SP-GiST
Ускорено сканирование только индекса для больших таблиц
vops — векторные операции для OLAP-запросов
Параметрами plan_cache_lru_memsize и plan_cache_lru_size можно
ограничить объем памяти, занимаемый подготовленными операторами.
Это может помочь, если приложение создает слишком много
подготовленных операторов.
Добавлен режим автоподготовки операторов тключен по умолчанию),
в котором часто используемые операторы неявно подготавливаются.
Может давать преимущество в тех случаях, когда явные команды
PREPARE не работают, например, когда применяется pgbouncer.
В индексах B-tree, GiST и SP-GiST с сортировкой по расстоянию
реализована поддержка алгоритма k-NN — поиска ближайших соседей.
Увеличен размер кеша карты видимости, что позволяет сканированию
только индекса быстрее работать с таблицами больше 256 Мбайт.
Экспериментальное расширение vops (vectorized operations) позволяет
ускорять запросы OLAP с фильтрацией и агрегированием благодаря
колоночному хранению внутри страниц («паркет») и использованию
векторных операций.
21
Блокировки
Оптимизация механизма проверки взаимоблокировок
Очередь для разделяемых легких блокировок
lwlock_shared_limit = 0
Разделение таблицы блокировок на секции
log2_num_lock_partitions = 4
Уменьшена конкуренция при расширении файлов B-tree
Одновременная проверка ситуации взаимоблокировки многими
процессами (что может произойти на нагруженных системах с большим
количеством ядер) вызывает замедление работы сервера вплоть до
полной остановки. В Postgres Pro проверка ограничена одним
процессом в один момент времени.
Для улучшения работы с легкими блокировками имеется параметр
lwlock_shared_limit. Он задает количество разделяемых блокировок, по
достижении которого запускается «справедливый» режим ожидания —
последующие блокировки добавляются в очередь. В этом случае
устраняется возможность бесконечного откладывания исключительных
блокировок, что важно при большой конкуренции за ресурс.
Для повышения параллелизма таблица блокировок разделяется на
несколько секций. Количество секций всегда является степенью двойки,
поэтому задается показатель степени. В PostgreSQL он всегда равен 4,
то есть таблица делится на 16 секций. В Postgres Pro Enterprise
показатель можно задать параметром log2_num_lock_partitions, если
при большой конкуренции значения по умолчанию не хватает.
Уменьшена конкуренция при расширении файлов B-tree: к файлу
добавляется сразу несколько страниц, как при расширении таблицы.
22
Буферный кеш
Более эффективная работа с горячими страницами индексов
Оптимизация для NUMA-архитектур
Уменьшена конкуренция за хеш-таблицу
1024 отдельно блокируемых секций
Улучшен менеджер буферного кеша:
устранено узкое место, возникающее при обращении к горячим
страницам индексов при высокой конкуренции;
изменена внутренняя реализация хеш-таблицы буферного кеша для
более эффективной работы, в том числе на NUMA-архитектурах;
сама хеш-таблица буферного кеша разделена на 1024 секции
(в PostgreSQL128) для снижения конкуренции на многоядерных
системах.
23
Поиск в тексте и в json
Метод доступа RUM
фразовый поиск и ранжирование
pg_tsparser — альтернативный анализатор
Hunspell — словари для ряда языков
shared_ispell — размещение словарей в общей памяти
JsQuery — язык запросов к данным jsonb
поиск во вложенных объектах и массивах
операторы сравнения с индексной поддержкой
Для улучшения полнотекстового поиска добавлен метод доступа RUM,
который похож на GIN, но поддерживает фразовый поиск и выдачу
ранжированных результатов.
Расширение pg_tsparser изменяет стандартную стратегию разбора
текста для слов, включающих подчеркивания, цифры и буквы, а также
для слов, разделенных знаком минуса. Оно удобно, в частности, для
поиска в коде.
Расширение Hunspell предоставляет возможность использовать
популярные словари Hunspell для разных языков.
В отличии от стандартной реализации словарей ispell, расширение
shared_ispell позволяет разместить словарь в общей памяти.
Расширение JsQuery предоставляет язык запросов для поиска
в значениях типа jsonb. С добавлением в PostgreSQL поддержки
стандарта SQL/JSON потеряло актуальность, но сохраняется для
совместимости.
24
Нагрузка
Анализ нагрузки и мониторинг
25
Анализ нагрузки
pgpro_stats — статистика выполнения
развитие pg_stat_statements
pgpro_pwr — выявление ресурсоемких
операций: выборки и отчеты
развитие pg_profile
Тема 7. Анализ
производительности
Расширение pgpro_stats позволяет собрать статистику планирования
и выполнения SQL-операторов. Основано на pg_stat_statements.
Pgpro_pwr накапливает статистические выборки (полученные на основе
других расширений и результатов работы сборщика статистики),
анализирует их и строит отчеты о нагрузке.
26
Анализ нагрузки
pg_wait_sampling — семплирование событий ожидания
auto_explain — добавлено время планирования
pg_waldump — добавлен вывод времени
Определение объема сгенерированных WAL-записей
pgBadger — поддержка формата журнала Postgres Pro
Mamonsu — агент мониторинга для Zabbix
pgbench — учет ошибок сериализации и взаимоблокировок
Расширение pg_wait_sampling семплирует события ожидания.
Расширение подробно рассматривается в курсе DBA2.
В auto_explain добавлено отображение длительности планирования.
В pg_waldump добавлен вывод времени для различных типов
журнальных записей.
Представление pgpro_stat_wal_activity отображает объем
сгенерированных каждым процессом записей WAL.
Добавлено стороннее расширение pgBadger, адаптированное для
корректной работы с Postgres Pro.
Добавлен Mamonsu — агент мониторинга Postgres Pro для Zabbix:
В pgbench добавлен корректный учет ошибок сериализации и
взаимоблокировок.
27
Безопасность
Профили и аудит, сертификация
28
Профили и аудит
passwordcheck — запрет простых паролей
Профили пользователя
парольные политики и ограничения
pg_proaudit — аудит действий пользователей
Тема 9.
Профили
пользователей
Тема 10.
Аудит
Расширение passwordcheck запрещает использование простых
паролей.
Профили пользователей ограничивают использование системы,
в частности, реализуют парольные политики.
Расширение pg_proaudit позволяет проводить аудит действий
пользователей.
29
Сертификация ФСТЭК
Очистка удаленных данных
на диске и в оперативной памяти
Контроль целостности файлов
Работа с персональными данными и конфиденциальной информацией
требует использования сертифицированной редакции Postgres Pro
Enterprise Certified. Для этой редакции сделано несколько изменений,
которые присутствуют и в несертифицированной Postgres Pro
Enterprise, но по умолчанию выключены.
Чтобы не допустить возможности восстановления удаленных данных,
освобождаемые области памяти автоматически заполняются нулевыми
байтами — как на диске, так и в оперативной памяти.
Утилита pg_integrity_check проверяет контрольные суммы
отслеживаемых файлов: исполняемых, конфигурационных, таблиц
системного каталога.
30
Планировщик заданий
pgpro_scheduler — встроенный планировщик заданий
разовые и планируемые задания
позволяет обойтись без средств операционной системы
Тема 11. Планировщик
заданий
Расширение pgpro_scheduler — интегрированный в Postgres Pro
Enterprise планировщик заданий. С его помощью можно задавать
сложные расписания, динамически вычислять время следующего
запуска для повторяющихся заданий, выполнять SQL-команды задания
в одной или в нескольких последовательных транзакциях, назначать
задания для немедленного или отложенного однократного выполнения
одновременно с обычными планируемыми заданиями.
31
Резервное копирование
pg_probackup — система резервного копирования
и восстановления
централизованный каталог копий
политики хранения
инкрементальное копирование
многопоточность
ptrack
механизм для получения измененных страниц данных
Темы 12, 13 и 14.
Резервное копирование
pg_probackup — система резервного копирования и восстановления
кластеров баз данных PostgreSQL и Postgres Pro.
Утилита поддерживает каталог резервных копий, позволяя настраивать
политики хранения.
Реализованы различные виды инкрементального копирования,
многопоточность и другие возможности.
Механизм PTRACK позволяет в определенных случаях значительно
ускорить инкрементальное копирование, сообщая утилите номера
блоков данных, измененных после предыдущего копирования.
32
Репликация и кластеры
Доработки репликации и кластер multimaster
33
Репликация
Смягченная синхронная репликация
ограничение отставания реплики
synchronous_standby_gap = 0
Автоматическое исправление поврежденных страниц
страницы запрашиваются с резервного сервера
page_repair = off
Восстановление поврежденных записей WAL
walsender может прочитать запись из буфера в оперативной памяти
wal_sender_check_crc = off
Смягченная синхронная репликация позволяет временно перевести
синхронную реплику в асинхронный режим при значительном
отставании.
При чтении страницы с неверной контрольной суммой основной сервер
может запросить эту страницу с резервного сервера и автоматически
восстановить ее.
Процесс walsender может восстановить поврежденную запись WAL из
буферов оперативной памяти.
34
Синхронный кластер
multimaster — синхронный кластер без разделения ресурсов
все узлы ведущие
распределенные транзакции
отказоустойчивость и высокая доступность
масштабирование читающей нагрузки
Тема 15.
Синхронный кластер
multimaster
Расширение multimaster позволяет настроить синхронный кластер,
в котором любой узел может принимать запросы как на чтение, так
и на запись.
Встроенный менеджер глобальных транзакций позволяет работать
с кластером как с монолитной базой, гарантируя обычные свойства
ACID. Протокол фиксации на основе кворума обеспечивает
отказоустойчивость и высокую доступность кластера.
Обеспечивается масштабируемость читающих транзакций.
35
Итоги
Postgres Pro Enterprise содержит разнообразные
дополнительные возможности
изменения в коде ядра PostgreSQL
дополнительные расширения
улучшения сторонних расширений
Основные возможности детально рассматриваются в курсе