репликация postgresql имеет слишком большой размер

#postgresql #replication

#postgresql #репликация

Вопрос:

postgresql 10.14@ubuntu18.04

У меня есть основная база данных и реплицированная база данных. Проблема в том, что размер каталога, содержащего репликацию, слишком велик. Это около 7 ТБ, с другой стороны, каталог, содержащий primary, составляет 1,5 ТБ. Но результат исследования du внутри этих каталогов выглядит одинаково. Отличается только размер каталога, и я не могу найти, в чем причина.

Результат du приведен ниже.

для основной базы данных

 du -sh database
1.5T    database
  

для первичной внутренней базы данных

 du -sh *
4.0K    PG_VERSION
1.5T    base
456K    global
4.0K    pg_commit_ts
4.0K    pg_dynshmem
16K pg_logical
28K pg_multixact
12K pg_notify
12K pg_replslot
4.0K    pg_serial
4.0K    pg_snapshots
4.0K    pg_stat
4.0K    pg_stat_tmp
12K pg_subtrans
4.0K    pg_tblspc
4.0K    pg_twophase
273M    pg_wal
80K pg_xact
4.0K    postgresql.auto.conf
4.0K    postmaster.opts
4.0K    postmaster.pid
  

для базы данных репликации

 du -sh database
7.2T    database
  

для репликации

 du -sh *
4.0K    PG_VERSION
1.5T    base
456K    global
4.0K    pg_commit_ts
4.0K    pg_dynshmem
16K pg_logical
28K pg_multixact
12K pg_notify
12K pg_replslot
4.0K    pg_serial
4.0K    pg_snapshots
4.0K    pg_stat
4.0K    pg_stat_tmp
12K pg_subtrans
4.0K    pg_tblspc
4.0K    pg_twophase
5.8T    pg_wal
80K pg_xact
4.0K    postgresql.auto.conf
4.0K    postmaster.opts
4.0K    postmaster.pid
4.0K    recovery.conf
  

Есть ли какой-нибудь способ выяснить, в чем причина?
Как я могу уменьшить размер данных, которые имеет репликация?
Спасибо!

Комментарии:

1. Файл журнала PostgreSQL на стороне ожидания расскажет вам, почему у PostgreSQL возникла проблема с удалением старых файлов WAL из pg_wal .

Ответ №1:

5.8T pg_wal

Я думаю, вы нашли причину.

Когда вы настраивали реплику, вы, вероятно, скопировали каталог pg_replslot, чего вы не должны были делать. Итак, теперь реплика ожидает, когда ее собственная каскадная реплика подключится к ней для чтения WAL, который она сохраняет, но для этого нет реплики. Удалите этот каталог в реплике и перезапустите реплику.

В качестве альтернативы, возможно, вы установили archive_mode в значение всегда, но ваша archive_command не работает с репликой.

Комментарии:

1. Спасибо за ваш повтор, я просто не смог обнаружить, что pg_wal имеет размер 5,8 ТБ. Я неправильно понял, что это 5,8 ГБ. У меня есть один вопрос, упомянутый вами каталог — это каталог pg_wal? Итак, конкретно то, что я должен сделать, похоже на это? [1.остановка службы sudo postgresql 2. запуск sudo rm pg_wal/* 3.запуск службы sudo postgresql] Это правильно? Или, может быть, упомянутый вами каталог — pg_replslot?

Ответ №2:

Я делаю ниже, чтобы удалить pg_wal.

  1. подключитесь к репликации
  2. удалите слот репликации с помощью pg_drop_replication_slot

после этого размер pg_wal постепенно уменьшался.