postgresql性能优化

1 SQL查询性能优化

 1) 检查数据检索的索引是否建立,凡是需要查找的字段尽量建立索引,甚至是联合索引;创建索引,包括表达式和部分索引;

 2) 使用COPY语句代替多个Insert语句;

 3) 将多个SQL语句组成一个事务以减少提交事务的开销;

 4) 从一个索引中提取多条记录时使用CLUSTER;

 5) 从一个查询结果中取出部分记录时使用LIMIT;

 6) 使用预编译式查询(Prepared Query);

 7) 使用ANALYZE以保持精确的优化统计;

 8) 定期使用VACUUM 或 pg_autovacuum进行大量数据更改时先删除索引(然后重建索引)

2 应用程序开发接口使用方法优化

 1) 检查程序是否使用了连接池,如果没有使用,尽快使用吧;

 2) 检查使用连接后,是否交还给了连接池;

3 数据库服务器配置参数优化

 服务器参数配置配置文件postgres.conf中的很多设置都会影响性能,主要的影响因素如下:

 1) shared_buffers。

   postgresql通过shared_buffers和内核/磁盘打交道。因此增加shared_buffers可以让更多的数据缓存在shared_buffers,通常设置为实际RAM的10%是合理的,比如50000(400M)

 2) work_mem。 

   增加work_mem有助于提高排序的速度。postgresql在执行排序操作时,会根据work_mem的大小决定是否将一个大的结果集拆分为几个小的和work_mem查不多大小的临时文件。显然拆分的结果是降低了排序的速度。通常设置为实际RAM的2%-4%,根据需要排序结果集的大小而定,比如81920(80M)

 3) effective_cache_size:

   postgresql能够使用的最大缓存,这个数字对于独立的pgsql服务器而言应该足够大,比如4G的内存,可以设置为3.5G(437500)

 4) maintence_work_mem

   该内存在正常使用情况下,用到的频率不高;但是CREATE INDEX, VACUUM等操作时,往往这些指令消耗比较多的资源,因此应该尽快让这些指令快速执行完毕:给maintence_work_mem大的内存,比如512M(524288)

 5) max_connections:通常,max_connections的目的是防止max_connections * work_mem超出了实际内存大小。比如,如果将work_mem设置为 实际内存的2%大小,则在极端情况下,如果有50个查询都有排序要求,而且都使用2%的内存,则会导致swap的产生,系统性能就会大大降低。当然,如果有4G的内存,同时出现50个如此大的查询的几率应该是很小的。max_connections和work_mem的具体关系,可以参考下述链接: http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html 和 http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html

4 计算机硬件配置性能优化

由于计算机硬件大多数是兼容的,人们总是倾向于相信所有计算机硬件质量也是相同的。事实上不是, ECC RAM(带奇偶校验的内存),SCSI (硬盘)和优质的主板比一些便宜货要更加可靠且具有更好的性能。PostgreSQL几乎可以运行在任何硬件上,但如果可靠性和性能对你的系统很重要,你就需要全面的研究一下你的硬件配置了。计算机硬件对性能的影响可浏览 http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html 和 http://www.powerpostgresql.com/PerfList/


你可能感兴趣的:(postgresql性能优化)