【Mastodon】使用pg_repack来无需停止实例删除数据库中的不必要空间
作为一个本地信息共享的本地SNS,我运营着名为“十日町市的Mastodon”的实例。
此外,我还管理着与个人开发的Web应用程序”街头路线”进行互动的Mastodon实例”另一个公会”。
在这里,我将记录安装pg_repack扩展时的备忘录。
实例的环境
-
- さくらのクラウド
-
- CentOS 7.7.1908
-
- Mastodon v3.0.1
- PostgreSQL 12.0
pg_repack是一个用于重组PostgreSQL表的工具。
可以将PostgreSQL作为扩展功能使用。
这个问题在以下链接中有详细的解释。
介绍实用工具pg_repack的使用方法
通过整理扩大了的数据库,清理重复的数据写入和删除操作,可以增加存储空间。
而且与PostgreSQL标准的VACUUM不同的是,它的特点是可以在不停止Mastodon实例的情况下执行。
Mastodon这个社交网络可以像WordPress一样安装在自己的服务器上,并且可以根据喜好自行运营,但需要自行承担各种维护责任。
我从 PostgreSQL 9.6.15 版本开始使用 pg_repack,它成为了我一个非常有用的维护工具。
删除旧版本
首先,请确认是否已安装旧版本的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
使用该命令逐一删除。
安装库。
(Note: The given phrase is in Japanese, not Chinese. Therefore, the translation into Chinese is provided.)
在编译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的数据库(数据库名称在这里是mastodon)中注册pg_repack。
# su - mastodon
$ cd live
$ sudo su - postgres -c 'psql -d mastodon -c "CREATE EXTENSION pg_repack;"'
以上是pg_repack安装完成的内容。
请勿删除数据库领域。
我将对Mastodon中的两个表:statuses和conversations进行操作,这些表占用了大量的存储空间。
以下是命令的内容。
$ sudo su - postgres -c 'pg_repack -d mastodon -t statuses'
$ sudo su - postgres -c 'pg_repack -d mastodon -t conversations'
您可以通过以上命令,在不停止Mastodon实例的情况下,删除不需要的数据库空间,以增加服务器存储空间的可用容量。
顺便提一下,由于我这边有两年份的无用空间,所以我成功地节省了约百余兆字节的存储空间。
額外談話:在升級時需注意的事項
我想在将来升级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