F.46. ptrack

PTRACK — это механизм, предназначенный для резервного копирования базы Postgres Pro на уровне блоков. Когда PTRACK включён, программы резервного копирования, в частности pg_probackup, могут использовать его API для получения информации об изменённых блоках, создавая инкрементальные копии. Копируя только блоки, изменённые со времени создания предыдущей копии, можно значительно ускорить процесс создания и минимизировать объём резервных копий.

PTRACK спроектирован так, что он может допускать неточности в положительную сторону, но ошибки в отрицательную сторону исключены: это означает, что все изменения в каталоге данных, не считая изменений вспомогательных битов, гарантированно отмечаются в карте PTRACK, хотя изменёнными могут также считаться и некоторые на самом деле не модифицированные блоки.

F.46.1. Настройка PTRACK

Установив Postgres Pro Standard, выполните следующие действия:

  1. Добавьте ptrack в параметр shared_preload_libraries в файле postgresql.conf:

    shared_preload_libraries = 'ptrack'
  2. Задайте для параметра ptrack.map_size положительное целое значение.

    Для оптимальной производительности рекомендуется задавать ptrack.map_size равным N / 1024, где N — объём кластера Postgres Pro в мегабайтах. Если этот параметр будет иметь меньшее значение, это увеличит вероятность наложения информации разных блоков в карте PTRACK, что повлечёт ложные положительные результаты при определении изменённых блоков. Вследствие этого в инкрементальную копию могут попасть и неизменённые блоки, от чего её размер может несколько увеличиться.

    Большее значение ptrack.map_size не окажет негативного влияния на работу PTRACK, но имейте в виду, что для обеспечения надёжности PTRACK использует два дополнительных временных файла такого же размера, поэтому в общей сложности для PTRACK потребуется ptrack.map_size * 3 мегабайт дискового пространства. Устанавливать значение, превышающее 1 Гбайт, не рекомендуется.

  3. Проверьте значение параметра wal_level. Используя PTRACK, необходимо установить для этого параметра значение replica или выше. В противном случае вы могли бы потерять изменения в случае аварийной остановки, так как некоторые команды не записывают информацию, если уровень wal_level равен minimal, а файлы карты PTRACK сбрасываются на диск только во время контрольных точек.

  4. Перезапустите экземпляр Postgres Pro Standard, чтобы изменения вступили в силу, а затем создайте расширение PTRACK:

    CREATE EXTENSION ptrack;

    В результате этой операции будут созданы функции PTRACK, необходимые для обращения к данным PTRACK.

После запуска сервера механизм PTRACK начинает отслеживать все изменения страниц в кластере Postgres Pro и создаёт файл ptrack.map, содержащий последние значения LSN для изменившихся страниц.

Примечание

Параметр ptrack.map_size можно задать только при запуске сервера. В случае изменения этого параметра ранее созданная карта PTRACK очищается, и отслеживание изменённых блоков начинается заново. Во избежание потери изменений рекомендуется сделать полную резервную копию сразу после присвоения ему другого значения.

F.46.2. Параметры конфигурации PTRACK

ptrack.map_size (integer)

Задаёт размер файла карты PTRACK и объём выделяемой для него общей памяти в мегабайтах. В карте PTRACK хранятся наибольшие значения LSN для всех страниц кластера Postgres Pro, изменённых с момента включения PTRACK. Для этого параметра не рекомендуется устанавливать значение, превышающее 1 Гбайт. Значение -1 отключает PTRACK, а при 0 помимо отключения производится очистка всех служебных файлов.

Параметр ptrack.map_size можно задать только при запуске сервера. В случае изменения этого параметра ранее созданная карта PTRACK очищается, и отслеживание изменённых блоков начинается заново. Во избежание потери изменений рекомендуется сделать полную резервную копию сразу после присвоения ему другого значения.

По умолчанию: -1

F.46.3. Функции PTRACK

ptrack_init_lsn() returns pg_lsn

Возвращает LSN, соответствующий последней инициализации карты PTRACK.

ptrack_get_pagemapset(lsn pg_lsn) returns setof record

Возвращает набор файлов данных с картой блоков, изменившихся после заданного LSN.

Например:

SELECT * FROM ptrack_get_pagemapset('0/2000028');
         path         |         pagemap          
----------------------+--------------------------
 global/2698          | \x0700000000000000000000
 global/6000          | \x0100000000000000000000
 global/3593          | \x0300000000000000000000
 global/1232          | \x0700000000000000000000
 global/1233          | \x0700000000000000000000
 global/1214_vm       | \x0300000000000000000000
 global/2847          | \x0300000000000000000000
 global/2396          | \x0300000000000000000000
 base/1/3603          | \x0f00000000000000000000
 base/1/3081          | \x0700000000000000000000
 base/1/2652          | \x0700000000000000000000
 base/1/4152          | \x0300000000000000000000
ptrack_version() returns text

Выдаёт версию PTRACK.