F.54. ptrack

F.54.1. Настройка PTRACK
F.54.2. Функции PTRACK

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

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

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

  1. Создайте расширение PTRACK.

    CREATE EXTENSION ptrack;

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

  2. Проверьте значение параметра wal_level.

    Для использования PTRACK необходимо, чтобы параметр wal_level имел значение replica или выше.

  3. Задайте для параметра ptrack_map_size положительное целое значение и перезапустите сервер.

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

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

В случае последующего изменения параметра ptrack_map_size ранее созданный файл карты PTRACK очищается, и отслеживание новых блоков начинается с начала.

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

pg_ptrack_control_lsn() returns pg_lsn

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

pg_ptrack_get_block(tablespace_oid oid, db_oid oid, relfilenode oid, blockno bigint) returns record

Считывает в буфер блок с заданным номером, относящийся к указанному табличному пространству и отношению, и выдаёт его содержимое в виде значения bytea.

pg_ptrack_get_pagemapset(lsn pg_lsn) returns setof record

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

Например:

SELECT * FROM pg_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.