zoukankan      html  css  js  c++  java
  • PostgreSQL 数据库性能调优的注意点

    PostgreSQL提供了一些性能调优的功能。主要有如下几个方面。
    1.使用EXPLAIN
       EXPLAIN命令可以查看执行计划,这个方法是我们最主要的调试工具。
     
    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。

    对生产运行的数据库要用定时任务crontb执行如下操作:

    psql -U username -d databasename -c "vacuum verbose analyze tablename;"

  • 相关阅读:
    下拉框Html.DropDownList 和DropDownListFor 的经常用法
    39个让你受益的HTML5教程
    RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
    BP神经网络算法学习
    java实现第七届蓝桥杯取球博弈
    java实现第七届蓝桥杯剪邮票
    java实现第七届蓝桥杯剪邮票
    java实现第七届蓝桥杯剪邮票
    java实现第七届蓝桥杯剪邮票
    java实现第七届蓝桥杯抽签
  • 原文地址:https://www.cnblogs.com/songyuejie/p/6374434.html
Copyright © 2011-2022 走看看