3.5. Запуск pg_probackup3 в параллельных потоках (многопоточность) #

Команды backup, restore, merge, delete, catchup, archive-push, archive-get и validate могут выполняться в несколько параллельных потоков. Это может существенно ускорять работу pg_probackup3 при наличии достаточных ресурсов (ядер процессора, производительности дисковой подсистемы и сети).

Параллельным выполнением управляют ключи командной строки -j/--threads, --num-write-threads и --num-validate-threads. Эти параметры должны быть неотрицательными целыми числами.

Примечание

Команда restore пока не поддерживает эти параметры. Число потоков равняется числу сегментов резервной копии.

Восстановление происходит в параллельном режиме только на этапе копирования данных из каталога копий в каталог данных кластера. При запуске сервера Postgres Pro он должен будет воспроизвести записи из WAL, а это может происходить только последовательно.

Если эти параметры не указаны или имеют нулевое значение, pg_probackup3 по умолчанию использует количество ядер процессора. Если определить количество ядер не удастся, будет использоваться один поток.

Когда параметры --num-write-threads и --num-validate-threads указаны, они переопределяют значение -j.

Если запрошенное количество потоков превышает системное ограничение (например, указанное в /proc/sys/kernel/threads-max), будет выведено предупреждение и вместо запрошенного значения будет использовано системное ограничение. Если ограничение не обнаружено, будет применено значение, указанное пользователем.

Ограничение количества потоков также можно задать с помощью переменной окружения PG_PROBACKUP_MAX_THREADS. Если параметр -j не указан, но задана переменная окружения PG_PROBACKUP_MAX_THREADS, количество потоков определяется автоматически исходя из количества доступных ядер процессора, но не может превышать значение PG_PROBACKUP_MAX_THREADS.

В режиме PRO количество потоков чтения должно быть меньше значения серверного параметра max_wal_senders.

Например, чтобы запустить резервное копирование в четыре параллельных потока, выполните:

pg_probackup3 backup -B каталог_копий --instance=имя_экземпляра -b FULL -j 4

Команда archive-push вызывается Postgres Pro как часть параметра archive_command, а archive-get — как часть restore_command. Хотя каждая из команд вызывается для одного файла WAL, один процесс pg_probackup3 может параллельно обрабатывать несколько файлов WAL (сканируя каталог pg_wal в случае archive-push и копируя из каталога резервных копий в случае archive-get), используя указанное количество потоков. Также можно указать параметр --batch-size для обработки сегментов WAL пакетами заданного размера. За дополнительной информацией обратитесь к описанию команд archive-push и archive-get.

3.5. Running pg_probackup3 on Parallel Threads (Multithreading) #

backup, restore, merge, delete, catchup, archive-push, archive-get, and validate processes can be executed on several parallel threads. This can significantly speed up pg_probackup3 operation given enough resources (CPU cores, disk, and network bandwidth).

Parallel execution is controlled by the -j/--threads, --num-write-threads, and --num-validate-threads command-line options. These options must be non-negative integers.

Note

The restore command does not support these options yet. The number of threads will match the number of segments in the backup.

Parallel restore applies only to copying data from the backup catalog to the data directory of the cluster. When Postgres Pro server is started, WAL records need to be replayed, and this cannot be done in parallel.

If these options are not specified or set to zero, pg_probackup3 defaults to the number of CPU cores. If the core count cannot be determined, a single thread will be used.

When specified, --num-write-threads and --num-validate-threads override -j.

If the requested threads exceed the system limit (e.g., from /proc/sys/kernel/threads-max), a warning will be displayed, and the system limit value will be used instead. If no limit is found, the value specified by the user will be applied.

The thread limit can also be controlled by the PG_PROBACKUP_MAX_THREADS environment variable. If the -j option is not specified, but PG_PROBACKUP_MAX_THREADS is set, the thread count is automatically determined based on available CPU cores but is capped by the PG_PROBACKUP_MAX_THREADS value.

In the PRO mode, the number of read threads must be less than the value of the max_wal_senders server parameter.

For example, to create a backup using four parallel threads, run the following command:

pg_probackup3 backup -B backup_dir --instance=instance_name -b FULL -j 4

The archive-push command is called by Postgres Pro as part of the archive_command parameter and archive-get — as part of restore_command. Although triggered for one WAL file, a single pg_probackup3 process can handle multiple WAL files (scanning the pg_wal directory in case of archive-push and copying from the backup catalog in case of archive-get) in parallel using the specified number of threads. You can also specify the --batch-size option to process WAL segments in batches of the specified size. For more details, refer to the archive-push and archive-get command descriptions.

FAQ