PostgreSQL的postgresql.conf是性能优化的核心配置文件,需根据服务器硬件资源调整关键参数:
慢查询是性能瓶颈的主要来源,需通过工具定位并优化:
Seq Scan(全表扫描)、高耗时节点(如排序、哈希),针对性优化。例如,若查询未使用索引,需检查WHERE条件或索引设计。WHERE date(order_time) = '2023-10-27'会导致索引失效),可改写为WHERE order_time >= '2023-10-27 00:00:00' AND order_time < '2023-10-28 00:00:00'。LIMIT+OFFSET分页,避免一次性获取大量数据;对于深度分页(如OFFSET 10000),可改用WHERE id > last_id LIMIT 10(基于游标分页)。索引是提升查询速度的关键,但需合理设计与管理:
WHERE id = 1)和范围查询(如WHERE age > 18)。tsvector列)、数组(如tags列)或多值类型。WHERE user_id = 1 AND status = 'active'),列顺序需与查询条件一致(选择性高的列放前面)。CREATE INDEX idx_orders_pending ON orders(id) WHERE status = 'pending'),减少索引大小,提升写入性能。REINDEX(重建索引,如REINDEX INDEX idx_users_email)清理碎片;使用VACUUM ANALYZE更新统计信息,帮助优化器制定更准计划。定期维护可保持数据库高效运行:
autovacuum(默认开启),并根据负载调整参数(如autovacuum_vacuum_cost_limit)。VACUUM合并为VACUUM ANALYZE。SELECT * FROM logs_202509 WHERE create_time >= '2025-09-01'仅需扫描9月分区)。硬件资源是性能的基础,需针对性升级:
/var/lib/postgresql/14/main)迁移至SSD,显著提升I/O性能。/etc/sysctl.conf,如降低vm.swappiness(如设为10),减少系统内存换页频率;增加net.core.somaxconn(如设为1024),提升数据库连接队列长度。shared_buffers、work_mem等参数可设置越大,减少磁盘I/O。parallel_workers参数),多核CPU可提升复杂查询(如聚合、JOIN)的性能。持续监控可及时发现性能问题:
SELECT * FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;可找出最耗时的查询。CREATE MATERIALIZED VIEW monthly_sales AS SELECT ...),查询时直接读取结果,避免重复计算。pg_stat_user_indexes查看索引使用情况)。