我知道更快的磁盘比我使用的将有所帮助,但这将需要更长的时间,我正在尝试使用一些紧急措施,以减less磁盘IO。 顶上几乎不断地报道红色的DSK使用。 这是为了postgres 8.3。
我的shared_buffers设置是24MB,尽pipe服务器有16GB的RAM没有被充分利用。 我的第一个想法是给数据库尽可能多的内存,但我不知道如何做到这一点(这是一个专用的数据库服务器)。
任何不需要重新启动的解决scheme是可取的,但我会采取我所能得到的。
谢谢!
24MB的shared_buffers设置是保守的默认设置,我认为对于有16GB内存的专用数据库,这个设置要高得多。 但是,是的,你将不得不重新启动服务器来调整它的大小。 http://wiki.postgresql.org/wiki/Performance_Optimization是开始进行性能configuration指导的好地方。 将shared_buffers设置为4GB或6GB似乎更合理。
请注意,在Linux上,您需要调整kernel.shmmax sysctl设置(在/etc/sysctl.conf中或者直接编写/ proc / sys / kernel / shmmax)来分配一个共享内存块。 如果你没有,你会得到一个错误,指定了多less请求,你必须设置kernel.shmmax比那更高。
既然你有很多的内存,你也可以考虑把默认的work_mem设置得更高一点,这样会使得sort和hash(group / order / distinct等)在内存中工作,而不是使用临时文件。 您不需要重新启动服务器来执行此操作,只需更新configuration文件,重新加载服务, 新的会话将获得新的设置。 会话的默认工作内存为1MB,您可以计算一次可以使用的最大值作为work_mem * max_client_connections并估计会有什么影响。
您还应该增加effective_cache_size来向计划者指出内核FS层可能会在postgresql的共享缓冲区之外的内存中caching大量页面。
等希望这可以让你一个良好的开端。
除了这里给出的build议,你可能也想看看你的汽车真空设置。 默认情况下,它会在大约50次更新之后触发,如果你的数据库正在进行大量的更新/插入,这可能会触发不必要的真空声明,这将产生大量的IO。
用noatime重新装入磁盘
在一个非常接近正常运行期间最大I / O吞吐量的系统上, 您可能需要增加checkpoint_completion_target来减less检查点的I / O负载 。 这样做的缺点是延长检查点会影响恢复时间,因为需要保留更多的WAL段以便可能用于恢复
在这里看到更多。
如果postgresql的diskio非常高,你应该检查运行的语句,特别是对于语句,做一个“在磁盘上sorting”,并设置适当的索引。
只是谷歌的“Postgresql性能调整”,你会发现足够的后面从哪里开始。