在 Debian 上优化 PostgreSQL,通常可以从系统层面、数据库配置、SQL 与索引、运维监控四个维度来做。下面给你一个实用、可落地的优化清单(以 Debian + PostgreSQL 12/13/14/15 为例)。
free -h
swapon --show
# 提高共享内存
kernel.shmmax = 17179869184
kernel.shmall = 4194304
# 网络
net.core.somaxconn = 1024
net.ipv4.tcp_tw_reuse = 1
sysctl -p
noatime,nodiratime
echo never > /sys/kernel/mm/transparent_hugepage/enabled
永久生效(Debian):
systemctl edit postgresql
加入:
[Service]
Nice=-5
配置文件位置:
/etc/postgresql/<version>/main/postgresql.conf
shared_buffers = 25% ~ 40% 物理内存
work_mem = 16MB ~ 64MB
maintenance_work_mem = 512MB ~ 1GB
effective_cache_size = 50% ~ 75% 物理内存
示例(16GB 内存):
shared_buffers = 4GB
work_mem = 32MB
maintenance_work_mem = 1GB
effective_cache_size = 12GB
max_connections = 100 ~ 300
⚠️ 不建议盲目调大,推荐用 pgbouncer
wal_buffers = 16MB
checkpoint_timeout = 15min
checkpoint_completion_target = 0.9
logging_collector = on
log_min_duration_statement = 500
log_line_prefix = '%t [%p]: [%l] user=%u,db=%d '
SELECT *EXPLAIN ANALYZE SELECT ...;
apt install pgbouncer
模式推荐:
pool_mode = transaction
apt install postgresql-autodoc
或设置 cron:
0 3 * * * psql -c "VACUUM ANALYZE;"
CREATE EXTENSION pg_stat_statements;
查看慢 SQL:
SELECT * FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;
pg_topprometheus + postgres_exporterpgAdminpgbench -i -s 50 testdb
pgbench -c 32 -j 4 -T 60 testdb
shared_buffers / work_mem如果你能告诉我:
我可以给你一套直接可抄的配置。