我们目前有一个Postgres数据库,其中有100个表,其中20个表的行数超过5 000 000行,主数据库服务器在Debian 32MB RAM 8处理器上运行。Postgres调整和缩放
另外还有一个使用Slony复制的Slave DB。
我们的应用程序使用Java和Hibernate框架进行SQL查询,c3p0作为连接池。
我们的问题是,我们预计目前在高峰时段大约30和大约4在低交通时间的高负荷。 目前我们没有在主从机之间使用select语句进行负载平衡。
Postgres的主DB的配置如下:
shared_buffers = 6144MB
temp_buffers = 16MB
max_prepared_transactions = 20
work_mem = 128MB
max_fsm_pages = 409800
自动清理是上。
C3P0 Hibernate的连接池的配置是:
<property name="c3p0.min_size">3</property>
<property name="c3p0.max_size">200</property>
<property name="c3p0.timeout">300</property>
<property name="c3p0.max_statements">1000</property>
<property name="c3p0.idle_test_period">300</property>
一个我们面临的主要问题是选择查询是非常复杂的,大量加入,甚至工会。
什么是解决方案来调整我们的实际系统,避免高负载?
升级硬件? 主控与从属之间的负载平衡? 错误的配置?
任何建议在更好的负载平衡复制系统比slony?
优化SQL语句是不可能的,因为我们没有开发软件。
使用解释的结果,您可能能够定义新的索引,这将改进sql语句的性能而不会改变它们。 – crowne 2010-01-20 07:21:41