PostgresSQL-内存分配
postgresql的内存分配主要由 shared_buffers、temp_buffers、work_mem、maintenance_work_mem 参数控制。 shared_buffers 又可以叫做共享缓冲区, postgresql对数据操作时都要先将数据从磁盘读取到内存中,然后进行更新,最后再将数据写回磁盘。shared_buffers的功能就是用于存放从磁盘读取的数据。根据文档参数的设置范围一般在25%~40%之间 。windows与linux对内存的管理方式不同,在linux中需要注意共享段大小的设置(kernel.shmmax)。 temp_buffers 称之为临时缓冲区,用于数据库会话访问临时表数据,系统默认值为8M。可以在单独的session中对该参数进行设置,尤其是需要访问比较大的临时表时,将会有显著的性能提升。 work_mem 可以称之为工作内存或者操作内存。其负责内部的sort和hash操作,合适的work_mem大小能够保证这些操作在内存中进行。定义太小的话,sort或者hash操作将需要与硬盘进行swap,这样会极大的降低系统的性能;太大的话致使在能够在内存中完成的操作数量减少,其他的部分需要与磁盘进行swap操作,增加IO降低性能 。系统提供的默认值是1M,在实际的生产环境中,要对系统监控数据进行分析,作出最好的选择。 大致有两种方式