PosgtreSQLを調整し、Pleromaのレスポンスを向上する。

はじめに

(DBConnection.ConnectionError) connection not available and request was dropped from queue after xxxxmsというエラーが出てきてしまったため、PosgtreSQL を調整し、Pleroma のレスポンスを向上する。
ユーザーは pleroma で進めていく。

1.Pleroma 側の調整

/opt/pleroma/config/prod.secret.exs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
config :pleroma, Pleroma.Repo,
adapter: Ecto.Adapters.Postgres,
username: "pleroma",
password: "db_password",
database: "pleroma_db",
hostname: "localhost",

- pool_size: 20,
- timeout: 120000,
- queue_target: 200,
- queue_interval: 4000

- config :pleroma, :dangerzone, override_repo_pool_size: true

2.PostgreSQL 側の設定

postgresql の設定ファイルは大体/etc/postgresql/$VER/main/下に存在する。
このpostgresql.confpg_createclusterをしたときにしか生成されないのであらかじめバックアップを取っておく。$VERはpostgresqlのバージョン

terminal
sudo cp /etc/postgresql/$VER/main/postgresql.conf /etc/postgresql/$VER/main/postgresql.back

バックアップから戻す場合は

terminal
sudo cp /etc/postgresql/$VER/main/postgresql.back /etc/postgresql/$VER/main/postgresql.conf

とする。

このサイトのExample configurations1GB RAM, 1CPUを参考にする。
nanoの場合Ctrl + Wで検索し、値を変更する。

/etc/postgresql/$VER/main/postgresql.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

- max_connections = 20

+ max_connections = 100

- shared_buffers = 256MB

+ shared_buffers = 128MB

- effective_cache_size = 768MB

+ // effective_cache_size = 4GB

- maintenance_work_mem = 64MB

+ // maitenance_work_mem = 64MB

- work_mem = 13107kB

+ // work_mem = 4MB

変更した。いったん様子を見る。
sudo service pleroma restart

PGTuneで最適な値を手に入れる。
使い方は簡単で、フォームを埋めるだけ。
DB Version は 12, OS Type は Linux, DB Type は Web application, Total Memory(RAM)は 1GB, Number of CPUs は 4, Number of Connections は 20, Data Storage は SD カードがなかったため SSD Strage とした。これをもとにpostgresql.confを書き換える。

/etc/postgresql/$VER/main/postgresql.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

- checkpoint_completion_target = 0.9

+ // checkpoint_completion_target = 0.5

- wal_buffers = 7834kB

+ wal_buffers = -1

- default_statistics_targer = 100

+ // default_statistics_targer = 100

- random_page_cost = 1.1

+ // random_page_cost = 4.0

- effective_io_concurrency = 200

+ // effective_io_concurryency = 1

- work_mem = 6553kB

+ work_mem = 13107kB

- min_wal_size = 1GB

+ min_wal_size = 80MB

- max_wal_size = 4GB

+ max_wal_size = 1GB

- max_worker_processes = 4

+ max_worker_processes = 8

- max_parallel_workers_per_gather = 2

+ // max_parallel_workers_par_gather = 2

- max_parallel_workers = 4

+ max_parallel_workers = 8

- max_parallel_workers = 2

+ // max_parallel_workers = 2

書き換えたらsudo service pleroma restartをして完了

3.再起動を組み込む。

timerを使わず、serviceのみで再起動させる。を参考に再起動するようにしておく。
/etc/systemd/system/pleroma.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[Unit]
Description=Pleroma social network
After=network.target postgresql.service

[Service]
ExecReload=/bin/kill $MAINPID
KillMode=process
Restart=always
User=pleroma
Environment="MIX_ENV=prod"
WorkingDirectory=/opt/pleroma
ExecStart=/usr/bin/mix phx.server

- RuntimeMaxSec=86400

[Install]
WantedBy=multi-user.target

参考

db_connection
Ecto - Troubleshooting

コメント