我知道比我正在使用的磁盘更快的磁盘会有所帮助,但这将需要更长的时间,我正在尝试使用一些紧急措施来减少磁盘 IO。atop 几乎一直在红色上报告 DSK 使用情况。这是针对 postgres 8.3 的。
我的 shared_buffers 设置为 24MB,但服务器有 16GB 的 RAM,尚未充分利用。我的第一个想法是为数据库提供尽可能多的 RAM,但我不确定如何做到这一点(这是一个专用的数据库服务器)。
任何不需要重新启动的解决方案都是更好的,但我会采取目前我能得到的解决方案。
谢谢!
答案1
24MB shared_buffers 设置是保守的默认值,我认为对于具有 16GB RAM 的专用数据库,它需要更高。但是,是的,您必须重新启动服务器才能调整其大小。http://wiki.postgresql.org/wiki/Performance_Optimization是性能配置指南的一个很好的起点。将 shared_buffers 设置为 4GB 或 6GB 似乎更合理。
请注意,在 Linux 上,您需要调整 kernel.shmmax sysctl 设置(在 /etc/sysctl.conf 中或只需写入 /proc/sys/kernel/shmmax)以分配这么大的共享内存块。如果不这样做,您将收到一个错误,指出请求了多少内存,您必须将 kernel.shmmax 设置为高于该值。
由于您有大量内存,您可能还会考虑将默认的 work_mem 设置得更高,这将使诸如排序和哈希(group/order/distinct 等)之类的操作倾向于在内存中工作,而不是使用临时文件。您无需重新启动服务器即可执行此操作,只需更新配置文件,重新加载服务即可新的会话将获得新的设置。会话的默认工作内存为 1MB,您可以计算一次可以使用的最大内存,work_mem * max_client_connections
并估计会产生什么影响。
您还应该增加effective_cache_size来向规划器表明内核FS层很可能在postgresql的共享缓冲区之外的内存中缓存大量页面。
等等。希望这能给你带来好的开始。
答案2
使用以下方法重新挂载磁盘诺亚泰
答案3
除了此处给出的建议之外,您可能还想查看自动清理设置。默认情况下,它会在大约 50 次更新后触发,如果您的数据库正在进行大量更新/插入,这可能会触发不必要的清理语句,从而产生大量 IO。
答案4
如果postgresql的diskio很高,你应该检查正在运行的语句,特别是对于执行“磁盘排序”的语句,并设置适当的索引。
只要谷歌一下“Postgresql 性能调优”,你就会找到足够的信息来指导你如何开始。