admin

[运营交流] Postgresql性能优化之work_mem参数

work_mem参数


    该参数是postgresql每个进程可以使用的工作内存空间。如果进程需要的容量超过了这个范围,就要把处理内容输出到临时文件里,相当于OS的swap处理。

    查询时如果用到了排序,哈希关联,bitmap检索等方式的话,就要分别利用work_mem的内存空间。也就是一个SQL语句可能会同时使用多个工作内存空间,而不是共用一个。

    设置这个参数的时候,就要考虑到同时连接数以及每个连接平均使用的内存空间数。总内存数减去 (同时连接数”平均使用数的总和),剩下的才是OS和postgresql可以利用的缓存。(参考值,不是绝对值) 设置的太大的话,反倒会引起OS的swap,影响性能。

 

  正确设置work_mem的方法如下:

  1) psql连接数据库

  2)database=# set client_min_messages='LOG';

  3) database=# set log_temp_files = 0; //显示所有使用临时文件的日志

  4) 执行比较慢的SQL语句

  5) 如果显示了类似下列的日志的话,就要加大work_mem的值,然后重复第五步

    LOG: temporary file: path "base/pgsql_tmp/pgsql_tmp27660.1568", size 88155700

 

  修改这个参数不用重启数据库,reload一下就可以了。

  最好先执行一下SQL语句,把需要的资源全部放到缓存里,然后再调试,可以排除IO的影响。


#1楼
发帖时间:2015-12-28   |   查看数:0   |   回复数:1
toshow
mark
2020-3-25 #2楼
游客组