PostgreSQL pg_statsinfo / Docker

Postgresの統計情報取得ツールpg_statsinfoをためしてみました。

参考)
https://www.sraoss.co.jp/tech-blog/pgsql/pg_statsinfo/
https://github.com/ossc-db/pg_statsinfo/blob/main/doc/pg_statsinfo-ja.md

環境) PostgreSQL 13 & pg_statsinfo 13 / CentOS 7 / Docker / WSL2
CentOSを使った理由は、参考サイトにrpmのインストール方法しかないのもありますが、Redhat互換のCentOSのサポートが終了することから、この環境を押さえておきたいからです。(Redhatは初めて使ったLinuxでしたが、その後様々なディストリビューションがでできてからは、結果的にUbuntuを使うことが多くなりました。業務ではRedhatが多いことからもその流儀を復習したいということもあります。)

docker pull centos:8
docker run -it -d –name centos8 centos:8
docker exec -it centos8 /bin/bash

早速問題が発生しました。CentOS8はすでにサポート終了しているため、パッケージマネージャーのリポジトリが使えません。(dnfコマンドでエラー)
ミラーにアクセスする部分をbaseに書き換えればいいという情報もありましたが、うまくいかずver7にしました。
しかしながら上記の方法では、サービスの起動に権限がないというエラーがでましたので、Dockerfileからビルドする方法にします。

参考) https://www.opensourcetech.tokyo/entry/20190222/1550822082

Dockerfile

docker build –rm -t centos7 .
docker run –privileged -it -d –name centos7p centos7

ここからコンテナに入ります。(楽してDokerDesktopから)
ver7はdnfがインストールされていないためyumでインストール
参考) https://qiita.com/piyojiro/items/58f9a89120808e1c1e84

yum -y install wget
yum -y install epel-release
yum -y install dnf

ネットワークツールのインストール

dnf install net-tools

ロケールも設定

export LC_ALL=C

Postgresのインストール
参考) https://qiita.com/yasushi-jp/items/7e4187bc3ca3bff75b93

dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
dnf install -y postgresql13-server

初期化

/usr/pgsql-13/bin/postgresql-13-setup initdb

サービス登録

systemctl enable postgresql-13
systemctl start postgresql-13

reporterの閲覧で使うWebサーバも登録(デフォルトでインストール済)

systemctl start httpd
systemctl enable httpd

サービス一覧

systemctl list-units –type=service –all

postgresユーザパスワード設定

# su – postgres
$ psql
psql (13.11)
postgres=# alter role postgres with password ‘postgres’;
ALTER ROLE

いよいよpg_statsinfo、pg_stats_reporterのインストールをします。

wget -O pg_statsinfo-13.0-1.pg13.rhel7.x86_64.rpm –no-check-certificate https://sourceforge.net/projects/pgstatsinfo/files/pg_statsinfo/13.0/pg_statsinfo-13.0-1.pg13.rhel7.x86_64.rpm/download
dnf install pg_statsinfo-13.0-1.pg13.rhel7.x86_64.rpm
wget -O pg_stats_reporter-13.0-1.el7.noarch.rpm –no-check-certificate https://sourceforge.net/projects/pgstatsinfo/files/pg_stats_reporter/13.0/pg_stats_reporter-13.0-1.el7.noarch.rpm/download
dnf install pg_stats_reporter-13.0-1.el7.noarch.rpm

Postgres設定追加

vi /var/lib/pgsql/13/data/postgresql.conf

vi /var/lib/pgsql/13/data/pg_hba.conf

(172.17.0.1/24は、コンテナ内のネットワーク。外部からアクセスするため)

Reporter設定編集
vi /etc/pg_stats_reporter.ini

Postgres再起動

systemctl restart postgresql-13

プロセス確認

レポートの取得

/usr/pgsql-13/bin/pg_statsinfo -l

/usr/pgsql-13/bin/pg_statsinfo -r ALL

(大量の表示を確認)

Webレポート

実際は前後が違ったり、ここにかかれていないことをやったりしましたが、ここまで急いでまとめました。(一気にまとめないと忘れてしまうので)
Webレポートやdockerの外からpsqlするためにポート設定が必要ですが、途中で思い出したため、一旦コンテナをイメージ化してから再度起動しました。

docker ps
docker commit 3c7716619a72 centos7p:0.0.1
docker run –privileged -it -d -p 5432:5432 -p 80:80 –name centos7p3 centos7p:0.0.1

取得したレポートについてはまた次の機会に調べたいと思います。