Pg_basebackup, зависит ли скорость копирования от типа данных преобладающих в БД и можно ли как-то увеличить скорость копирования средствами postgres?

Есть БД на 1ТБ, создана искусственно. содержит кучу табличек с текстовыми полями содержащими хеш от рандома (каждая порядка 10Gb).
Копирование всего кластера на соседнюю машину занимает порядка 14 часов. При этом вроде не сетевая система, ни дисковая нагрузки не испытывает.
можно ли каким-либо способом увеличить скорость (в идеале сократить время до 5 часов) (м.б существует какой-либо фактор многопоточности?).
или как-то копировать кластер напрямую с ФС не используя pg_basebackup. (пробовал жать средствами tar в basebackup но это не повлияло на скорость)

Знаю что в идеале pg_basebackup не влияет на производительность кластера и можно делать полную копию раз в неделю и держать при этом wal архивы. но вариант с каждодневным полным бекам меня всё равно интересует (если это конечно возможно)
  • Вопрос задан
  • 459 просмотров
Решения вопроса 2
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Есть БД на 1ТБ, создана искусственно. содержит кучу табличек с текстовыми полями содержащими хеш от рандома (каждая порядка 10Gb).
Копирование всего кластера на соседнюю машину занимает порядка 14 часов.


1 тб = 1000 гб.

100 мбит = ~10 мегабайт в секунду. 600 мегабайт в минуту То есть 1000 гигабайт/ 0.6 = 27 часов.

1000 мбит = ~100 мегабайт в секунду, но часто пропускная способность дисков упирается в примерно 50 мегабайт/сек = 3 гб/мин, 1000 гигабайт/ 3 гб ~ 5.5 часов

Подозреваю, что все-таки бутылочное горлышко либо сеть (gzip сжимает данные, потому вместо 27 часов получаете около 14)
Либо gzip сжатие в один поток (напрягается только одно ядро, из-за чего кажется, что CPU не нагружен), выполняется слишком долго.

В первом случае убедитесь, что -z включено и попробуйте -Z 9, а также гигабитную сеть
Во втором случае попробуйте наоборот -Z 1, чтобы уменьшить нагрузку на CPU
Ответ написан
Melkij
@Melkij
PostgreSQL DBA
basebackup - это буквально копирование почти всего из PGDATA тупо на уровне файликов.
Строго в один поток. (ну, на самом деле в отдельном потоке walreceiver ещё если wal method выставлен stream)

Смотрите внимательнее куда упираетесь. Диск на чтение откуда снимаете? Диск куда пишете? Сеть? Одно ядро CPU на базе с которой снимаете? На которую пишете?
Несколько гигабит занять в общем-то не проблема.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Посмотрите в сторону использования Barman. Как раз для вашей ситуации.
Поддерживает два режима:
  1. "Классический", когда используется rsync для копирования изменений
  2. "Современный", когда используется непрерывный Streaming backup

И комбинации вышеуказанных
docs.pgbarman.org/release/2.7/#two-typical-scenari...
Ответ написан
Комментировать
Jump
@Jump Куратор тега Резервное копирование
Системный администратор со стажем.
Запускайте бэкап и замеряйте нагрузу - очередь диска, сеть, процессор, то же самое на машине куда копируете.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы