Pull to refresh

pg_log, pg_xlog, pg_clog: с чем их едят

PostgreSQL
Translation
Tutorial
Original author: Josh Berkus
— Я тут типа удалил несколько Гб лог-файлов из каталога pg_xlog, чтобы освободить место на диске. Теперь моя база данных не взлетает.

— Ой-вей! Кхе-кхе… А когда говорите в последний раз резервную копию делали?

Именно в такой форме несколько раз взывали заказчики и пользователи о помощи на нашем IRC-канале. Учитывая легкость повторения этой ошибки, я решил выложить некоторую информацию о системных каталогах PostgreSQL.


Существует три директории в каталоге $PGDATA при его создании, которые имеют вид «pg_*log».

pg_log



$PGDATA/pg_log является по умолчанию местом, где хранятся журналы деятельности. Они включают в себя сообщения об ошибках, записи о запросах, и сообщения во время старта\выключения СУБД. Именно здесь следует искать информацию в случае, если PostgreSQL не запускается. Многие дистрибутивы Linux грешат тем, что могут переместить этот каталог куда-нибудь в /var/log/postgresql.

Вы можете свободно удалять, переименовывать, сжимать и перемещать файлы из pg_log без опаски, при условии что пользователь postgres имеет право на запись в каталог. Если pg_log раздувается за счет больших файлов, то вероятно, вам следует урезать список журналируемых вещей, изменив настройки в postgresql.conf.

pg_xlog



$PGDATA/pg_xlog — это место, где PostgreSQL хранит журнал транзакций. Этот набор бинарных файлов, с названиями вида '00000001000000000000008E', которые содержат образы данных последних транзакций. Эти журналы также используются при бинарной репликации.

Если репликация, архивирование или PITR (Point-In-Time-Recovery) отказывают, этот каталог рискует стать раздутым гигабайтами логов, которые сервер пишет на случай, если архивирование возобновится. Это может стать причиной переполнения дискового пространства.

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

Если вы окажетесь в ситуации, когда у вас есть 100 ГБ файлов в pg_xlog и база данных не запускается, и вы уже отключили архивирование/репликацию, и уже попытались очистить дисковое пространство любым другим способом, то, пожалуйста, сделайте два шага:
  1. Переместите файлы из pg_xlog на диск для резервного копирования или общий сетевой диск, но ни в коем случае не удаляйте их.
  2. Скопируйте обратно в pg_xlog только несколько наиболее старых файлов. Этого достаточно, чтобы PostgreSQL стартовал в штатном режиме.


pg_clog


$PGDATA/pg_clog содержит журналы метаданных транзакций. Этот журнал говорит серверу, какие транзакции завершены, а какие нет. Этот каталог мал и нету каких-либо предпосылок для его вздувания. Скорее всего вам никогда не придется его трогать.

Но если вы когда-нибудь удалите файлы из pg_clog, вы можете смело удалить и весь каталог базы данных. Не существует способа восстановить базу данных без этих журналов.

Стоит отметить, что если вы предпочитаете создавать резервные копии файлов в каталоге $PGDATA, вам следует убедиться, что каталоги pg_clog и pg_xlog также архивируются. В противном случае вы можете обнаружить, что резервная копия бесполезна.
Tags:postgresqlrecoverylogs
Hubs: PostgreSQL
Total votes 62: ↑59 and ↓3 +56
Views46.8K

Comments 24

Only those users with full accounts are able to leave comments. Log in, please.

Popular right now

Database Developer
from 3,000 to 4,000 €Spotware SystemsRemote job
Middle/Senior PHP-разработчик
from 230,000 ₽SCALE PAYRemote job
Python middle
from 150,000 to 200,000 ₽Portal BiletRemote job
Разработчик Backend Node.js
from 120,000 to 200,000 ₽КомфортелСанкт-Петербург