您好,欢迎访问一九零五行业门户网

PostgreSQL 数据库性能提升的几个方面

postgresql提供了一些帮助提升性能的功能。主要有一些几个方面。 1.使用explain explain命令可以查看执行计划,在前面的blog中
postgresql提供了一些帮助提升性能的功能。主要有一些几个方面。
1.使用explain
   explain命令可以查看执行计划,在前面的blog中已经介绍过。这个方法是我们最主要的调试工具。
2.及时更新执行计划中使用的统计信息
   由于统计 信息不是每次操作数据 库 都 进 行更新的,一般是在 vacuum 、 analyze 、 create index等ddl执行的时候会更新统计信息,  
因此执 行 计 划所用的 统计 信息很有可能比 较 旧。 这样执 行 计 划的分析 结 果可能 误 差会 变 大。
以下是表tenk1的相关的一部分统计信息。
select relname, relkind, reltuples, relpages
from pg_class
where relname like 'tenk1%';
relname                  | relkind | reltuples | relpages
----------------------+---------+-----------+----------
  tenk1                            | r       |     10000 |      358
  tenk1_hundred               | i       |     10000 |       30
  tenk1_thous_tenthous    | i       |     10000 |       30
  tenk1_unique1              | i       |     10000 |       30
  tenk1_unique2              | i        |     10000 |       30
(5 rows)
其中 relkind是类型,r是自身表,i是索引index;reltuples是项目数;relpages是所占硬盘的块数。
3.明确用join来关联表
   一般写法:select * from a, b, c where a.id = b.id and b.ref = c.id;
  如果明确用join的话,执行时候执行计划相对容易控制一些。
 例子:
    select * from a cross join b cross join c where a.id = b.id and b.ref = c.id;
    select * from a join (b join c on (b.ref = c.id)) on (a.id = b.id);
4.关闭自动提交(autocommit=false)
5.多次插入数据是用copy命令更有效率
   我们有的处理中要对同一张表执行很多次insert操作。这个时候我们用copy命令更有效率。因为insert一次,,其相关的index都要做一次,比较花费时间。
6.临时删除index
   有时候我们在备份和重新导入数据的时候,如果数据量很大的话,要很几个小时才能完成。这个时候可以先把index删除掉。导入在建index。
7.外键关联的删除
   如果表的有外键的话,每次操作都没去check外键整合性。因此比较慢。数据导入后在建立外键也是一种选择。
8.增加maintenance_work_mem参数大小
   增加这个参数可以提升create index和alter table add foreign key的执行效率。
9.增加checkpoint_segments参数的大小
   增加这个参数可以提升大量数据导入时候的速度。
10.设置archive_mode无效
   这个参数设置为无效的时候,能够提升以下的操作的速度
   create table as select
   create index
   alter table set tablespace
   cluster等。
11.最后执行vacuum analyze
   表中数据大量变化的时候建议执行vacuum analyze。
其它类似信息

推荐信息