<-- home

PostgreSQL 对大数据量排序时较慢的处理方法

使用 PostgreSQL 对大数据量排序的时候非常慢,使用 explain 会看到,最耗时的部分是在 sort 的时候,里面用到 external merge disk,这说明,内存已经不够排序了,用到了磁盘空间,这时效率是很低的。这种情况下可以考虑调高 work_mem,使用内存排序,性能会得到一些提升,设置方法如下

-- 查看当前 work_mem 数值
SHOW work_mem;

-- 设置 work_mem
SET work_mem = '800MB';

-- execute query 执行查询

-- 将 work_mem 重置
RESET work_mem;

上面的方法中 SET work_mem = '800MB' 只针对当前 session 有效,查询结束后将 work_mem 重置。因为调高了 work_mem,当出现大并发时,可能会导致 PG OOM,需要谨慎操作。

参考: https://andreigridnev.com/blog/2016-04-16-increase-work_mem-parameter-in-postgresql-to-make-expensive-queries-faster/

https://www.cybertec-postgresql.com/en/postgresql-improving-sort-performance/