ystemd+ 7660 0.0 0.3 352060 28284 ? S 22:31 0:00 /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main
systemd+ 7667 0.0 0.1 352588 9628 ? Ss 22:31 0:00 postgres: 13/main: checkpointer
systemd+ 7668 0.3 0.9 352060 78796 ? Ss 22:31 0:03 postgres: 13/main: background writer
systemd+ 7669 0.0 0.1 352060 13696 ? Ss 22:31 0:00 postgres: 13/main: walwriter
systemd+ 7670 0.0 0.1 352728 11892 ? Ss 22:31 0:00 postgres: 13/main: autovacuum launcher
systemd+ 7671 0.0 0.0 67996 5320 ? Ss 22:31 0:00 postgres: 13/main: stats collector
systemd+ 7672 0.0 0.0 352612 6640 ? Ss 22:31 0:00 postgres: 13/main: logical replication launcher
systemd+ 10900 82.0 3.8 487164 317728 ? Rs 22:33 10:42 postgres: 13/main: discourse discourse [local] DELETE
systemd+ 10901 0.0 0.1 353432 13804 ? Ss 22:33 0:00 postgres: 13/main: discourse discourse [local] idle
htop показывает, что процесс discourse [local] delete потребляет 100% процессорного времени. У дроплета 8 ГБ оперативной памяти, и в данный момент используется менее 1 ГБ (без учёта буферов).
Операционная система устарела, но это кажется мне очень странным. Памяти и места на диске достаточно, а задача postgres delete выполняется уже более 12 минут. Записей меньше 600 тысяч, а пользователей — менее 4 тысяч, так что база данных не огромная. О, подождите. Каталог postgres_data занимает 28 ГБ.
Я выполнил команду VACUUM VERBOSE ANALYZE;.
Вот что я сделал:
discourse=# SELECT checkpoints_timed, checkpoints_req FROM pg_stat_bgwriter;
checkpoints_timed | checkpoints_req
-------------------+-----------------
6 | 20
Сейчас я пытаюсь выполнить параллельную реиндексацию. Возможно, вакуум и реиндексация помогут.