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
1 2 3 4 5 6 7 8 9 10 11 12 13 |
FROM centos:7 ENV container docker RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \ systemd-tmpfiles-setup.service ] || rm -f $i; done); \ rm -f /lib/systemd/system/multi-user.target.wants/*;\ rm -f /etc/systemd/system/*.wants/*;\ rm -f /lib/systemd/system/local-fs.target.wants/*; \ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*;\ rm -f /lib/systemd/system/anaconda.target.wants/*; VOLUME [ "/sys/fs/cgroup" ] CMD ["/usr/sbin/init"] |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 |
shared_preload_libraries = 'pg_statsinfo' pg_statsinfo.snapshot_interval = 10min pg_statsinfo.enable_maintenance = 'on' pg_statsinfo.maintenance_time = '00:02:00' pg_statsinfo.repolog_min_messages = disable log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' log_min_messages = 'log' pg_statsinfo.syslog_min_messages = 'error' pg_statsinfo.textlog_line_prefix = '%t %p %c-%l %x %q(%u, %d, %r, %a) ' pg_statsinfo.syslog_line_prefix = '%t %p %c-%l %x %q(%u, %d, %r, %a) ' track_functions = 'all' log_checkpoints = on log_autovacuum_min_duration = 0 |
vi /var/lib/pgsql/13/data/pg_hba.conf
1 2 |
host all all 172.17.0.1/24 scram-sha-256 local all postgres ident |
(172.17.0.1/24は、コンテナ内のネットワーク。外部からアクセスするため)
Reporter設定編集
vi /etc/pg_stats_reporter.ini
1 2 3 4 5 6 7 8 9 10 11 12 |
;------------------------------------- ; repository1 ;------------------------------------- [repository1] ;------------------------------------- ; database connection ;------------------------------------- host = localhost port = 5432 dbname = postgres username = postgres password = postgres |
Postgres再起動
systemctl restart postgresql-13
レポートの取得
/usr/pgsql-13/bin/pg_statsinfo -l
/usr/pgsql-13/bin/pg_statsinfo -r ALL
(大量の表示を確認)
実際は前後が違ったり、ここにかかれていないことをやったりしましたが、ここまで急いでまとめました。(一気にまとめないと忘れてしまうので)
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
取得したレポートについてはまた次の機会に調べたいと思います。