pg_log、pg_xlog、pg_clog:彼らが食べるもの

-pg_xlogディレクトリから数GBのログファイルを削除して、ディスク領域を解放しました。 今、私のデータベースは離陸しません。

-ああ、ちょっと! Khe-khe ...そして最後にバックアップを行ったのはいつですか?

この形式で、顧客とユーザーはIRCチャンネルで何度も助けを求めました。 このエラーを繰り返しやすいので、 PostgreSQLシステムディレクトリに関する情報を投稿することにしました。


$ PGDATAディレクトリの作成時には、 "pg_ * log"という形式の3つのディレクトリがあります

pg_log



$ PGDATA / pg_logは、アクティビティログが保存されるデフォルトの場所です。 エラーメッセージ、クエリレコード、およびDBMSの起動/シャットダウン中のメッセージが含まれます。 PostgreSQLが起動しない場合の情報を探す場所です。 多くのLinuxディストリビューションは、このディレクトリを/ var / log / postgresqlのどこかに移動することで罪を犯します

postgresユーザーがディレクトリに書き込む権利を持っている場合、 pg_logからファイルを自由に削除、名前変更、圧縮、移動できます。 大きなファイルが原因でpg_logが肥大化した場合、おそらくpostgresql.conf設定を変更して、ログに記録されたもののリストを切り捨てる必要があります。

pg_xlog



$ PGDATA / pg_xlogは、PostgreSQLがトランザクションログを保存する場所です。 '00000001000000000000008E'の形式名前を持つこのバイナリファイルのセットには、最近のトランザクションのデータイメージが含まれています。 これらのログは、バイナリレプリケーションでも使用されます。

レプリケーション、アーカイブ、またはPITR(Point-In-Time-Recovery)が失敗すると、このディレクトリは、アーカイブが再開した場合にサーバーが書き込む膨大なログのログになるリスクを負います。 これにより、ディスク領域がいっぱいになる可能性があります。

pg_logとは異なり、このディレクトリ内のファイルを自由に削除、移動、または圧縮することはできません。 pg_xlogからファイルを削除すると、データベースに修復不可能な損傷を与える可能性があります。

pg_xlogに 100 GBのファイルがあり、データベースが起動せず、アーカイブ/レプリケーションをすでに無効にしており、すでに他の方法でディスク領域をクリアしようとしている場合、次の2つの手順を実行してください。
  1. ファイルをpg_xlogからバックアップディスクまたは共有ネットワークドライブに転送しますが、決して削除しないでください。
  2. いくつかの最も古いファイルのみをpg_xlogにコピーしてください 。 PostgreSQLを正常に起動するにはこれで十分です。


pg_clog


$ PGDATA / pg_clogには、トランザクションメタデータログが含まれます。 このログは、完了したトランザクションと完了していないトランザクションをサーバーに通知します。 このカタログは小さく、膨張の前提条件はありません。 ほとんどの場合、決して触る必要はありません。

ただし、 pg_clogからファイルを削除した場合は、データベースディレクトリ全体を安全に削除できます。 これらのログなしでデータベースを復元する方法はありません。

$ PGDATAディレクトリのファイルをバックアップする場合は、 pg_clogおよびpg_xlogディレクトリも必ずアーカイブするようにしてください 。 そうしないと、バックアップが役に立たないことがあります。

Source: https://habr.com/ru/post/J117813/


All Articles