F.49. ptrack
PTRACK — это механизм, предназначенный для резервного копирования базы Postgres Pro на уровне блоков. Когда PTRACK включён, программы резервного копирования, в частности pg_probackup, могут использовать его API для получения информации об изменённых блоках, создавая инкрементальные копии. Копируя только блоки, изменённые со времени создания предыдущей копии, можно значительно ускорить процесс создания и минимизировать объём резервных копий.
PTRACK спроектирован так, что он может допускать неточности в положительную сторону, но ошибки в отрицательную сторону исключены: это означает, что все изменения в каталоге данных, не считая изменений вспомогательных битов, гарантированно отмечаются в карте PTRACK, хотя изменёнными могут также считаться и некоторые на самом деле не модифицированные блоки.
F.49.1. Настройка PTRACK
Установив Postgres Pro Standard, выполните следующие действия:
- Добавьте - ptrackв параметр shared_preload_libraries в файле- postgresql.conf:- shared_preload_libraries = 'ptrack' 
- Задайте для параметра ptrack.map_size положительное целое значение. - Для оптимальной производительности рекомендуется задавать - ptrack.map_sizeравным- N/ 1024- N— объём кластера Postgres Pro в мегабайтах. Если этот параметр будет иметь меньшее значение, это увеличит вероятность наложения информации разных блоков в карте PTRACK, что повлечёт ложные положительные результаты при определении изменённых блоков. Вследствие этого в инкрементальную копию могут попасть и неизменённые блоки, от чего её размер может несколько увеличиться.- Большее значение - ptrack.map_sizeне окажет негативного влияния на работу PTRACK, но имейте в виду, что для обеспечения надёжности PTRACK использует два дополнительных временных файла такого же размера, поэтому в общей сложности для PTRACK потребуется- ptrack.map_size* 3- N) превышает 1- TB, значения больше 1024 стоит использовать, только если эффективность и, как следствие, оптимизация размера резервных копий, перевешивает издержки, связанные с увеличением карты PTRACK.
- Проверьте значение параметра wal_level. Используя PTRACK, необходимо установить для этого параметра значение - replicaили выше. В противном случае вы могли бы потерять изменения в случае аварийной остановки, так как некоторые команды не записывают информацию, если уровень- wal_levelравен- minimal, а файлы карты PTRACK сбрасываются на диск только во время контрольных точек.
- Перезапустите экземпляр Postgres Pro Standard, чтобы изменения вступили в силу, а затем создайте расширение PTRACK: - CREATE EXTENSION ptrack; - В результате этой операции будут созданы функции PTRACK, необходимые для обращения к данным PTRACK. 
После запуска сервера механизм PTRACK начинает отслеживать все изменения страниц в кластере Postgres Pro и создаёт файл ptrack.map, содержащий последние значения LSN для изменившихся страниц.
Примечание
Параметр ptrack.map_size можно задать только при запуске сервера. В случае изменения этого параметра ранее созданная карта PTRACK очищается, и отслеживание изменённых блоков начинается заново. Во избежание потери изменений рекомендуется сделать полную резервную копию сразу после присваивания ему другого значения.
F.49.2. Параметры конфигурации PTRACK
- ptrack.map_size(- integer)
- Задаёт размер файла карты PTRACK и объём выделяемой для него общей памяти в мегабайтах. В карте PTRACK хранятся наибольшие значения LSN для всех страниц кластера Postgres Pro, изменённых с момента включения PTRACK. Для этого параметра не рекомендуется устанавливать значение, превышающее 1 Гбайт. Значение 0 отключает PTRACK и производит очистку всех служебных файлов. - Параметр - ptrack.map_sizeможно задать только при запуске сервера. В случае изменения этого параметра ранее созданная карта PTRACK очищается, и отслеживание изменённых блоков начинается заново. Во избежание потери изменений рекомендуется сделать полную резервную копию сразу после присваивания ему другого значения.- По умолчанию: 0 
F.49.3. Функции PTRACK
- ptrack_init_lsn() returns- pg_lsn
- Возвращает LSN, соответствующий последней инициализации карты PTRACK. 
- ptrack_get_pagemapset(- начальный_lsn- pg_lsn) returns- setof record
- Возвращает список файлов данных, изменённых с момента, указанного в параметре - start_lsn, а также количество и битовую карту изменённых страниц для каждого файла.- Например: - postgres=# SELECT * FROM ptrack_get_pagemapset('0/185C8C0'); path | pagecount | pagemap ---------------------+-----------+---------------------------------------- base/16384/1255 | 3 | \x001000000005000000000000 base/16384/2674 | 3 | \x0000000900010000000000000000 base/16384/2691 | 1 | \x00004000000000000000000000 base/16384/2608 | 1 | \x000000000000000400000000000000000000 base/16384/2690 | 1 | \x000400000000000000000000
- ptrack_get_change_stat(- начальный_lsn- pg_lsn) returns- record
- Возвращает статистику изменений (количество файлов, количество изменённых страниц и их общий размер в мегабайтах) с момента, указанного в параметре - start_lsn.- Например: - postgres=# SELECT * FROM ptrack_get_change_stat('0/285C8C8'); files | pages | size, MB -------+-------+------------------------ 20 | 25 | 0.19531250000000000000
- ptrack_version() returns- text
- Выдаёт версию PTRACK.