数据派
聚焦技术和人文,分享干货,共同成长。
聚焦技术和人文,分享干货,共同成长。
shared_buffers
参数设置为系统内存的 25% - 50% 是一个不错的选择。例如,如果系统有 32GB 内存,可以将 shared_buffers
设置为 8GB - 16GB。swappiness
参数来降低内存交换的可能性。max_parallel_workers
和 max_parallel_workers_per_gather
参数,让数据库能够根据系统的 CPU 核心数合理分配并行工作进程。例如,如果系统有 16 个 CPU 核心,可以将 max_parallel_workers
设置为 8,max_parallel_workers_per_gather
设置为 4。shared_buffers
:前面已提及,它是 PostgreSQL 用于缓存数据块的共享内存区域,适当增大该参数可以减少磁盘 I/O。work_mem
:每个排序操作和哈希表在执行时可以使用的最大内存量。对于经常进行 ORDER BY
、GROUP BY
等操作的查询,可以适当增大该参数。例如,将其设置为 64MB - 256MB。maintenance_work_mem
:在执行 VACUUM
、CREATE INDEX
等维护操作时可以使用的最大内存量。适当增加该参数可以加快维护操作的速度,可设置为几百 MB 到几 GB。max_parallel_workers
:整个系统可以使用的最大并行工作进程数。根据系统的 CPU 核心数进行设置,一般为 CPU 核心数的一半左右。max_parallel_workers_per_gather
:每个 Gather
或 Gather Merge
节点可以启动的最大并行工作进程数。可以根据实际查询的并行需求和系统资源进行调整。wal_buffers
:WAL 缓冲区的大小。适当增大该参数可以减少 WAL 写入磁盘的次数,提高写入性能。一般可以设置为 shared_buffers
的 1/32 到 1/8。synchronous_commit
:控制事务提交时是否等待 WAL 写入磁盘。如果对数据的实时一致性要求不是非常高,可以将其设置为 off
或 local
,以提高事务提交的性能。-- 创建分区表
CREATE TABLE sales (
id serial,
sale_date date,
amount numeric
) PARTITION BY RANGE (sale_date);
-- 创建分区
CREATE TABLE sales_2024_01 PARTITION OF sales FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');
WHERE
子句和 ORDER BY
子句的列,可以创建索引。但要避免创建过多的索引,因为索引会增加写入操作的开销。-- 创建索引
CREATE INDEX idx_sale_date ON sales (sale_date);
EXPLAIN
和 EXPLAIN ANALYZE
命令分析查询的执行计划。EXPLAIN
会显示查询的执行计划,但不会实际执行查询;EXPLAIN ANALYZE
会实际执行查询,并显示执行计划和每个步骤的实际执行时间。-- 分析查询执行计划
EXPLAIN ANALYZE SELECT * FROM sales WHERE sale_date BETWEEN '2024-01-01' AND '2024-01-31';
JOIN
操作代替子查询。例如,将以下子查询:SELECT * FROM sales WHERE id IN (SELECT id FROM another_table WHERE condition);
JOIN
查询:SELECT s.* FROM sales s JOIN another_table a ON s.id = a.id WHERE a.condition;
VACUUM
操作,例如每天或每周执行一次。-- 对 sales 表执行 VACUUM
VACUUM sales;
ANALYZE
操作。-- 对 sales 表执行 ANALYZE
ANALYZE sales;
pg_stat_activity
、pg_stat_statements
等)和第三方监控工具(如 Prometheus + Grafana)监控数据库的性能指标,如查询响应时间、CPU 使用率、内存使用率等。根据监控结果及时调整配置参数和优化查询。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2024-03-05 MySQL批量更新10万条数据怎么最快?