在PostgreSQL 官方论坛的邮件中, 一些用户将work_mem设置为 512MB 或者更大而引起OOM问题。简单的说就是你运行的复杂查询不要引起 OOM 问题. 简单的说, 最好能为每一个 session 的查询设置自己的 work_mem.最好在 postgresql.conf 的值设置的很低 (1-10MB), 然后根据 那些查询会使用的 work_mem 超过设置的...
需要注意的是work_mem是每单个连接用户使用的内存,也就是实际需要的内存为max_connections * work_mem,必须保证max_connections*work_mem的值不要超过实际可用的内存。 1.3 maintenance_work_mem maintenance_work_mem定义的内存主要影响vacuum,analyze,create index,reindex等操作,这些命令用到的频率不高,但是会消耗较多...
autovacuum_work_mem 设置每个 autovacuum 进程可以使用的最大内存。 temp_buffers 定义用于存储临时表的内存。 此参数设置每个数据库会话使用的最大临时缓冲区数量。 effective_cache_size 定义操作系统和数据库中磁盘缓存的可用内存量。 PostgreSQL 查询规划器可确定此内存在 RAM 中是否是固定的。 值越大,越有可...
在postgresql中,work_mem不足(包括物化、hashjoin、某些table函数如generate_series)时写临时文件的实现在src/backend/utils/sort/tuplestore.c(它本质上是 tuplesort.c (logtape.c协助其实现multiple merge支持)的简化版本,src/backend/utils/sort/sharedtuplestore.c其实parallel-aware版本)中。 创建临时文件并写入元...
maintenance_work_mem是用于VACUUM、CREATE INDEX等维护操作的内存。一般情况下,可以将其设置为总RAM的10%。 effective_cache_size告诉PostgreSQL的查询优化器,操作系统和PostgreSQL自身的缓存一共有多少内存可用。一般情况下,可以将其设置为总RAM的50%-75%。
本地内存区主要包括工作内存(work_mem)、维护工作内存(maintenance_work_mem)以及临时缓冲(temp_buffers)。 工作内存用于查询处理过程中的数据排序(ORDER BY、DISTINCT)以及表之间的连接(Hash Join、Sort Merge Join)等操作。工作内存由参数work_mem进行配置,默认为 4 MB。
work_mem 参数调优 work_mem:在pgsql 8.0之前叫做sort_mem。postgresql在执⾏排序操作时,会根据work_mem的⼤⼩决定是否将⼀个⼤的结果集拆分为⼏个⼩的和work_mem查不多⼤⼩的临时⽂件。显然拆分的结果是降低了排序的速度。因此增加work_mem有助于提⾼排序的速度。通常设置为实际RAM的2% -...
work_mem --- 工作内存或者操作内存。 其负责内部的sort和hash操作,合适的work_mem大小能够保证这些操作在内存中进行。 maintenance_work_mem ---维护工作内存 主要是针对数据库的维护操作或者语句。 主要针对VACUUM,CREATE INDEX,ALTER TABLE ADD FOREIGN KEY等操作。
postgres=#setmaintenance_work_memto"2GB";SETTime:0.543ms postgres=#dropindex idx1_test;DROPINDEXTime:133.984ms postgres=#createindex idx1_testontest(id);CREATEINDEXTime:5661.018ms (00:05.661) 可以看到在使用默认的64MB创建索引,速度为7.4秒,而设置为2GB后,创建速度是5.6秒 ...
可以同时进行这样的操作。因此总的内存使用是work_mem的很多倍,在对 work_mem 做参数调整时, 要考虑上述事实。 排序操 做用于 ORDER BY, DISTINCT 和mergejoin。 散列表用于hash join, 基于散列的聚集操作, 基于散列的 IN 子查询。 进行这样的操作