你这个问题有点模糊,我分几种常见场景给你梳理一下 “在 CentOS 上 PostgreSQL 很慢” 的可能原因和排查方向。你可以对照看看是哪种情况。
PostgreSQL 是 重度依赖磁盘 的数据库。
可能原因:
排查:
iostat -x 1
看 %util、await
建议:
xfsdefaults,noatime,nodiratime
CentOS(尤其 7)默认参数对数据库不友好。
重点参数:
vm.swappiness = 10 # 默认可能是 30
sysctl -w vm.swappiness=10
还有:
dirty_ratiodirty_background_ratioPostgreSQL 很怕 swap。
检查:
free -h
swapon -s
如果看到 swap 被用:
shared_bufferswork_memSELinux 会导致:
排查:
getenforce
如果是 Enforcing,可临时测试:
setenforce 0
连接慢,不一定是查询慢。
常见:
pg_hba.conf 用了 hostname解决:
postgresql.conf:log_hostname = off
CentOS 上 yum 安装的 PG 默认很保守。
关键参数(示例,16G 内存):
shared_buffers = 4GB
effective_cache_size = 12GB
work_mem = 64MB
maintenance_work_mem = 1GB
random_page_cost = 1.1
症状:
检查:
SELECT relname, n_dead_tup FROM pg_stat_user_tables ORDER BY n_dead_tup DESC;
用:
SELECT * FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10;
⚠️ 现在更推荐:
你可以告诉我:
我可以给你 具体参数和命令。