我们有一个用Python2.7、Django、PostgreSQL 9.1和PostGIS 1.5构建的系统。在这个系统中,有一些广泛的验证过程,嗯,是密集的。
我们的机器:
所以: CentOS 6 HW: 8芯,32 HW内存,4Tb硬盘;
对于开发和测试,我们使用的是默认的PostgreSQL配置,我认为这有点错误。我想利用我们的硬件提供的全部能力,到目前为止,我们还没有得到很多流量。当它向公众发布时,将会有很多用户同时使用。
我们的应用程序有一些队列和异步策略来处理负载,但是,主要的问题是:我如何安全地调优PostgreSQL,运行一些测试,并确保调优在某种程度上是有效的?
发布于 2013-07-25 01:24:55
默认Pg配置几乎肯定不是最优的,这是一个保守的默认,旨在“将运行任何地方”而不是“将很快”。
关于这一点还有很多要说的,请参见http://wiki.postgresql.org/wiki/Tuning_你的_PostgreSQL_服务器、http://wiki.postgresql.org/wiki/Performance_优化和“PostgreSQL 9.0高性能”(格雷格·史密斯的)。(作为免责声明,我现在在2 nd象限与Greg合作,但在我搬到2 nd象限之前,我向他推荐了他的书)。
我不会重复那些参考文献中已经提到的内容。
我建议您运行pg_test_fsync以查看fsync()性能在I/O子系统上是否可以接受,因为这对于良好的传输处理吞吐量至关重要。对于阅读--大部分是工作负载--这并不重要。如果它很差,可以考虑获得一些高质量的SSD,并提供适当的内置电源故障保护,或者使用带有电池支持的写缓存的RAID控制器。相比之下,我的一台廉价的SSD笔记本电脑在pg_test_fsync中往往达到每秒5000次左右。
还可以使用sysbench来了解磁盘、seq和随机吞吐量是什么样的。当您调整random_page_size和seq_page_size时,这将是非常有用的。
最重要的是,使用连接池喜欢PgBouncer,而不是把max_connections提高到几百以上。
https://dba.stackexchange.com/questions/46928
复制相似问题