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的具体关系
4 计算机硬件配置性能优化
由于计算机硬件大多数是兼容的,人们总是倾向于相信所有计算机硬件质量也是相同的。事实上不是,ECC RAM(带奇偶校验的内存),SCSI(硬盘)和优质的主板比一些便宜货要更加可靠且具有更好的性能。PostgreSQL几乎可以运行在任何硬件上,但如果可靠性和性能对你的系统很重要,你就需要全面的研究一下你的硬件配置了。