LoginSignup
13
3

More than 3 years have passed since last update.

【Mastodon】pg_repackでインスタンス無停止のDB不要領域削除

Last updated at Posted at 2019-10-15

わたしは地元の情報を共有するローカルSNSとして十日町市のMastodonというインスタンスを運用しています。

また、個人開発のWebアプリまちかどルートと連動させているMastodonインスタンスアナザーギルドも管理しています。

ここでは、それらにpg_repackという拡張機能をインストールしたときのメモを残します。

インスタンスの環境

  • さくらのクラウド
  • CentOS 7.7.1908
  • Mastodon v3.0.1
  • PostgreSQL 12.0

pg_repackとは

PostgreSQLの拡張機能として使えます。

こちら↓で詳しく解説されています。

運用で役立つツールpg_repackのご紹介
https://qiita.com/bwtakacy/items/3be7a3e1540ccef7c9e3

要は、データの書き込みや削除を繰り返すうちに膨らんでしまったDBをきれいに整頓することで、ストレージの空き容量を増やすことにつながります。

しかもPostgreSQL標準のVACUUMと違ってMastodonインスタンスを停止させずに実行できることが特徴です。

MastodonというSNSは、WordPressのように自分のサーバーにインストールして好きなように運用できますが、そのぶん自己責任でいろいろな保守をしなければいけません。

pg_repackはPostgreSQL 9.6.15のときから愛用していて、自分にとって有用な保守ツールになっています。

旧バージョンの削除

まず、古いバージョンのPostgreSQLがインストールされていないかどうかを確認します。

# rpm -qa | grep postgres

わたしの場合、PostgreSQL 9.6.15がサーバーに残っていたせいで、以前インストールしていた旧バージョンのpg_repackが邪魔をして現PostgreSQL 12.0でうまく動作しませんでした。

もし上記コマンドで旧バージョンのPostgreSQLが残っていることがわかったら

# rpm -e postgresql96-contrib-9.6.15-1PGDG.rhel7.x86_64
# rpm -e postgresql96-devel-9.6.15-1PGDG.rhel7.x86_64
# rpm -e postgresql96-server-9.6.15-1PGDG.rhel7.x86_64
# rpm -e postgresql96-9.6.15-1PGDG.rhel7.x86_64
# rpm -e postgresql96-libs-9.6.15-1PGDG.rhel7.x86_64

というコマンドでひとつずつ削除していきます。

ライブラリのインストール

pg_repackのコンパイル時に下記のライブラリが必要でした。ひとつずつインストールしておきます。

# yum install llvm-toolset-7 llvm5.0
# yum install clang

パスの確認

旧バージョンのPostgreSQL 9.6.15でpg_repackをインストールしたとき /etc/profile.d/psql96.sh というファイルを作成してパスを通していました。

そのファイルをサーバーから削除したうえで、以下のようにファイルを作り直し、新しいパスを通します。

ファイルを新規作成します
# vi /etc/profile.d/psql12.sh

この1行を追記⇒ファイル保存(要viコマンド)
export PATH=$PATH:/usr/pgsql-12/bin

pg_repackのインストール

ここではPostgreSQL 12.0に対応したpg_repack v1.4.5をインストールします。

手順は下記のとおりです。必要なファイルをダウンロード・解凍したうえでmakeコマンドでインストールしていきます。

# wget -O - --no-check-certificate https://github.com/reorg/pg_repack/archive/ver_1.4.5.tar.gz | tar zxvf -
# cd pg_repack-ver_1.4.5
# make
# make install

続いて、PostgreSQL 12.0のDB(DBNAMEはここではmastodon)にpg_repackを登録します。

# su - mastodon
$ cd live
$ sudo su - postgres -c 'psql -d mastodon -c "CREATE EXTENSION pg_repack;"'

以上でpg_repackのインストールが完了します。

DB不要領域を削除

Mastodonでとくにストレージ容量を使うstatusesconversationsというふたつのテーブルに対して実行してみます。

コマンドは下記のとおりです。

$ sudo su - postgres -c 'pg_repack -d mastodon -t statuses'
$ sudo su - postgres -c 'pg_repack -d mastodon -t conversations'

以上のコマンドによってMastodonインスタンスを停止させることなく、DBの不要領域を削除し、サーバーのストレージの空き容量を増やすことができます。

ちなみにわたしの場合は2年分の不要領域があったせいか、百数十MBを節約できました。

余談: アップグレード時の注意

今後PostgreSQLをメジャーアップグレードするときpg_upgradeというコマンドを使うことになると思います。

その際、pg_repackに限らず拡張機能をインストールしているとうまくpg_upgradeコマンドが通りません。

そんなとき、下記のようにして、アップグレード前に拡張機能をアンインストールしておきます。

# su - mastodon
$ cd live
$ sudo su - postgres -c 'psql -d mastodon -c "DROP EXTENSION pg_repack;"'

なお、インストールしてある拡張機能を確認する方法は以下のとおりです。

$ psql
mastodon=> \dx

List of installed extensions
   Name    | Version |   Schema   |  Description
-----------+---------+------------+-----------------
 pg_repack | 1.4.5   | public     | Reorganize...
 plpgsql   | 1.0     | pg_catalog | PL/pgSQL...
(2 rows)

mastodon=> \q
13
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
3