PostgreSQL 数据库性能提升的几个方面_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。

时间: 2024-11-02 00:52:42

PostgreSQL 数据库性能提升的几个方面_PostgreSQL的相关文章

哈佛/MIT学生创造GPU数据库,性能提升70倍

2012年Todd Mostak 在哈佛中东研究中心攻读硕士研究生,他试图为自己的论文主题绘制和处理阿拉伯之春期间发布的4千万Twitter帖子,但处理这些帖子数小时耗费了甚至数 天.没有现成的系统能帮助他实现大数据集快速互动分析,于是他一边读MIT的数据库课程,一边开发出了利用GeForce Titan GPU处理数据的并行数据库系统MapD(演示,非论文).基于GFU的数据库系统比基于CPU的数据库性能提升了70倍,而整个硬件只花了5千美元.Todd Mostak计划在开源许可证下发布Map

MPP分布式数据库性能评估方法 - 阿里云HybridDB for PostgreSQL最佳实践

背景 通常评估一个数据库的性能,可以选择工业标准测试,或者根据业务模型,建模进行测试. 例如PostgreSQL pgbench支持的tpc-b测试,以及自定义模型测试. benchmarksql支持的tpc-c测试. gp_tpch支持的tpc-h测试等等. 参考文档如下 <TPC-H测试 - PostgreSQL 10 vs Deepgreen(Greenplum)> <PostgreSQL 使用 pgbench 测试 sysbench 相关case> <PostgreS

PostgreSQL 9.6 vacuum freeze大幅性能提升 代码浅析

PostgreSQL 9.6 vacuum freeze大幅性能提升 代码浅析 作者 digoal 日期 2016-10-02 标签 PostgreSQL , 9.6 , vacuum freeze , visibility map , skip frozen page 背景 PostgreSQL的tuple(即记录)头信息中有两个字段分别为XMIN,XMAX用于标记行产生与变更的事务号,以标示记录的版本号,事务的可见性等. 这个事务号是32BIT的长度,因此PG设计了一个事务存活的最长时间是约

【已更新内测入口】阿里云宣布开放开源 AliSQL 数据库 性能可提升 70%

阿里有很多开源产品(想了解有哪些吗?点此:进专题),继上段时间开源跨平台开发框架 Weex 之后,阿里巴巴再次宣布另一个重大开源项目 AliSQL(专题以及内测申请入口:点此进入).   8 月 9 日,在 2016 云栖大会·北京峰会上,阿里云宣布启动 AliSQL 数据库开源项目.该版本性能优于社区版 MySQL 70% 左右,可帮助中小企业和开发者提升数据运营能力.阿里云方面表示欢迎大家共同参与开源项目,在使用的同时也贡献智慧,为数据库行业带来更多进步. AliSQL 是基于 MySQL

千百倍的性能提升-Andrew大师谈数据库性能优化

在今年3月份RWP中国之旅技术分享活动期间Andrew大师和AWR之父Graham接受了记者采访,首次对外讲述自己的职业生涯和心路历程,分享了他们在中国的感受和期待,并就当前IT系统现状做了深入分析,表达了RWP团队的使命和宗旨,同时也对广大技术爱好和追求者给出了中肯的建议和指导. 本文为采访原文,若需要阅读中文版,请查看: 甲骨文副总裁谈性能优化:百倍和千倍的性能提升才值得兴奋 Xue:First of all, it is an honor to have to you here one m

从运维的角度分析使用阿里云数据库RDS的必要性--你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库

开宗明义,你不应该在阿里云上使用自建的MySQL or SQL Server数据库,对了,还有Oracle or PostgreSQL数据库. 云数据库 RDS(Relational Database Service)是一种稳定可靠.可弹性伸缩的在线数据库服务.基于飞天分布式系统和全SSD盘高性能存储,支持MySQL.SQL Server.PostgreSQL和PPAS(高度兼容Oracle)引擎,默认部署主备架构且提供了容灾.备份.恢复.监控.迁移等方面的全套解决方案. 当然,并不是指所有用户

PostgreSQL 数据库开发规范

PostgreSQL 数据库开发规范 背景 PostgreSQL的功能非常强大,但是要把PostgreSQL用好,开发人员是非常关键的. 下面将针对PostgreSQL数据库原理与特性,输出一份开发规范,希望可以减少大家在使用PostgreSQL数据库过程中遇到的困惑. 目标是将PostgreSQL的功能.性能发挥好,她好我也好. PostgreSQL 使用规范 命名规范 [强制]库名.表名限制命名长度,建议表名及字段名字符总长度小于等于63. [强制]对象名(表名.列名.函数名.视图名.序列名

ThinkJS 2.1:支持 TypeScript,性能提升 90%

Thinkjs 2.0 是第一个全面支持使用 ES6/7 特性开发的 Node.js 框架,于 2015.10.30 正式发布.使用 ES6 里的*/yield 或者 ES7 里的 async/await 可以很好的解决异步嵌套的问题,借助 Babel 编译,可以稳定运行在 Node.js 各个主流版本中.同时 ThinkJS 提供了自动编译和自动更新的机制,免去了文件修改后重启 Node.js 服务的麻烦. 经过一个多月的紧张开发后,ThinkJS 迎来了 2.1 版本.2.1 版本不管在功能

PostgreSQL 数据库巡检模板和脚本。

https://github.com/digoal/pgsql_admin_script #!/bin/bash # 已在CentOS 6.x上进行测试 # author: digoal # 2015-10 # 用法 . ./generate_report.sh >/tmp/report.log 2>&1 # 生成目录 grep -E "^----->>>|^\|" /tmp/report.log | sed 's/^----->>&g