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。
相关推荐
-
15个postgresql数据库实用命令分享
最初是想找postgresql数据库占用空间命令发现的这篇blog,发现其中提供的几 条命令很有用(但也有几条感觉是充数的=.=),于是就把它翻译过来了.另外这篇文章是09年的,所以里面的内容可能有点过时,我收集了原文中有用的评论放在了最后面. 现在有不少开源软件都在使用postgreSQL作为它们的数据库系统.但公司可能不会招一些全职的postgreSQL DBA来维护它(piglei: 在国内基本也找不到).而会让一些比如说Oracle DBA.Linux系统管理员或者程序员去 维护.在这篇
-
Python使用PyGreSQL操作PostgreSQL数据库教程
PostgreSQL是一款功能强大的开源关系型数据库,本文使用python实现了对开源数据库PostgreSQL的常用操作,其开发过程简介如下: 一.环境信息: 1.操作系统: RedHat Enterprise Linux 4 Windows XP SP2 2.数据库: PostgreSQL8.3 3. 开发工具: Eclipse+Pydev+python2.6+PyGreSQL(提供pg模块) 4.说明: a.PostgreSQL数据库运行于RedHat Linux上,Win
-
PostgreSQL数据库服务端监听设置及客户端连接方法教程
众所周知,PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),是一个可以免费使用的开放源代码数据库系统.本文详细介绍了PostgreSQL数据库服务端监听设置及客户端连接方法,具体如下: 一.背景介绍: 本文所述PostgreSQL服务端运行在RedHat Linux上,IP为:192.168.230.128 客户端安装在Windows XP上, IP为:192.168.230.1 二.配置方法: 1.修改服务端/opt/postgresql/data/postgresq
-
在windows下手动初始化PostgreSQL数据库教程
环境:win7 64 sp1 PG:9.3.5 1.创建用户postgres,密码同样是postgres: net user postgres postgres /add 2.在数据库根目录下建立data目录: C:\Program Files\PostgreSQL\9.3>md data 3.去掉administrator对data目录的权限: C:\Program Files\PostgreSQL\9.3>cacls data /e /t /r administrator 处理的目录: C
-
C#访问PostGreSQL数据库的方法
我对PostGreSQL只是一知半解,记录这个过程是希望如果以后微软技术方向的人遇到类似的需求,可以有个比较直接的的参考.在不熟悉的知识领域里,总是有搜索引擎可以帮到我. 初步了解PostGreSQL数据库及数据形态 首先我想看看PostGreSQL的数据库以及我想要获取的数据形态是什么样子的,Linux和PostGreSQL这两个关键字我都不熟悉,搜了一下找到了一个可以连通PostGreSQL数据库的Windows客户端,叫pgAdmin,我装的是III版本,应该是比较新的,下载安装后看到界面
-
将MySQL数据库移植为PostgreSQL
在北美,人们对于 PostgreSQL 的热情不断升温.随着 PostgreSQL 的发展, PostgreSQL 8.x 已经从技术上超越 MySQL 5.x ,而市场的超越相信只是时间问题.而最终,用户也许有机会享受到可媲美 Oracle 的开源数据库也未尝没有可能. 我供职的互联网公司,服务约 50 万商务用户,经过多次的升级移植,目前公司已经全部将后台数据库从 MySQL 移植到 PostgreSQL ,而个人完成了其中一半的数据库移植工作,所以对数据库从 MySQL 移植到 Postg
-
PostgreSQL 数据库性能提升的几个方面
1.使用EXPLAIN EXPLAIN命令可以查看执行计划,在前面的blog中已经介绍过.这个方法是我们最主要的调试工具. 2.及时更新执行计划中使用的统计信息 由于统计 信息不是每次操作数据 库 都 进 行更新的,一般是在 VACUUM . ANALYZE . CREATE INDEX等DDL执行的时候会更新统计信息, 因此执 行 计 划所用的 统计 信息很有可能比 较 旧. 这样执 行 计 划的分析 结 果可能 误 差会 变 大. 以下是表tenk1的相关的一部分统计信息. SELECT r
-
postgreSQL数据库的监控及数据维护操作
目前postgreSQL数据库的管理,数据查询等都需要安装postgreSQL软件或安装pgadmin等,远程访问都需要先登录到服务器等繁琐的操作.如果是开发团队,那么每个开发,测试,管理人员都要经历这个麻烦的过程. 使用Treesoft数据库管理系统,基于web方式管理postgreSQL,只需安装一次,大家直接通过浏览器使用,维护及监控数据库,大大简化工作量. 监控的指标包括:连接数,数据库大小,表空间,锁情况,QPS事务数等. Treesoft数据库管理系统,支持直接网络在线维护数据,数据
-
用PostgreSQL数据库做地理位置app应用
项目中用到了postgreSQL中的earthdistance()函数功能计算地球上两点之间的距离,中文的资料太少了,我找到了一篇 英文的.讲的很好的文章 ,特此翻译,希望能够帮助到以后用到earthdistance的同学. 做一个GEO应用从来都不是一件容易的事.但是用一些身边的开源项目就可以在几分钟内轻松解决这个问题. PostgreSQL有许多特性.是我的首选,它能够把数据库平台提升到另一个层次. 一.两种可用的选择 当我们想用Postgres作为GEO函数使用时,我们通常有2中选择(据
-
Mysql数据库性能优化一
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库. mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面进行优化,最终性能就会有大的提升. Mysql数据库的优化技术 对mysql优化是
-
一次SQL调优数据库性能问题后的过程(300W)
将绝大部分的SQL查询改为存储过程,这样的操作毫无疑问可以提高部分性能. 凡是使用"select * from xxx"的操作一律具体到所需字段. 使用join连接2个以上大量数据的表,且基础数据表变化不大的查询一律使用视图,并为此视图建立索引.理由来自SQL Server联机帮助手册: "对于标准视图而言,为每个引用视图的查询动态生成结果集的开销很大,特别是对于那些涉及对大量行进行复杂处理(如聚合大量数据或联接许多行)的视图.如果在查询中频繁地引用这类视图,可通过对视图创建
-
MongoDB创建一个索引而性能提升1000倍示例代码
MongoDB 创建索引的语法 1.为普通字段添加索引,并且为索引命名 db.集合名.createIndex( {"字段名": 1 },{"name":'idx_字段名'}) 说明: (1)索引命名规范:idx_<构成索引的字段名>.如果字段名字过长,可采用字段缩写. (2)字段值后面的 1 代表升序:如是 -1 代表 降序. 2.为内嵌字段添加索引 db.集合名.createIndex({"字段名.内嵌字段名":1},{"
-
mysql中影响数据库性能的因素讲解
关于数据库性能的故事 面试时多多少少会讲到数据库上的事情,"你对数据库的掌握如何?",什么时候最考验数据库的性能,答应主要方面上讲就是大数据量的读写时,而电商类的大促活动就是考验各自的数据库性能的时候啦. 对于web服务器而言,数据量大时,我们可以简单的通过横向扩展来减少单个服务器的负担,但是对于数据库服务器来说就没有那么简单了,他们不可能做到轻易的横向扩展,这样也违背了数据库的完整性与一致性的原则,那么我们的数据库架构该如何搭建呢? 对于大促类活动而言,不管是产品多好.策划多成功,如
-
浅谈postgresql数据库varchar、char、text的比较
如下所示: 名字 描述 character varying(n), varchar(n) 变长,有长度限制 character(n), char(n) 定长,不足补空白 text 变长,无长度限制 简单来说,varchar的长度可变,而char的长度不可变,对于postgresql数据库来说varchar和char的区别仅仅在于前者是变长,而后者是定长,最大长度都是10485760(1GB) varchar不指定长度,可以存储最大长度(1GB)的字符串,而char不指定长度,默认则为1,这点需要
-
解决postgresql 数据库 update更新慢的原因
;大约140000条数据) 竟然运行了一个小时还没有完成 下面是我的几点解决方案 我的update 语句 是从一个临时表更新值到另一个正式表 因为具体数据需要保密,我就不截图了 只说说大体思路,与方法 1.查看语句是否有问题 复制俩个一模一样的表 和数据 手动执行语句 发现不到一分钟就运行成功了 这样就可以确认语句没有问题 2.查找影响updata的因素 我的第一反应是不是有锁 有锁的情况会导致等待或者死锁 查询锁 select w1.pid as 等待进程, w1.mode as 等待锁模式,
-
PostgreSQL 数据库跨版本升级常用方案解析
大家好,我是只谈技术不剪发的 Tony 老师.对于企业而言,将数据库系统升级到新版本通常可以获得更好的性能.更多的功能.最新的安全补丁和错误修复等.因此,本文就来介绍一下 PostgreSQL 数据库版本升级的 3 种常用方案. 升级方案概述 PostgreSQL 版本号由主要版本和次要版本组成.例如,PostgreSQL 12.4 中的 12 是主要版本,4 是次要版本:PostgreSQL 10.0 之前的版本由 3 个数字组成,例如 9.6.19,其中 9.6 是主要版本,19 是次要版本
随机推荐
- python中 logging的使用详解
- iOS购物分类模块的实现方案
- js css+html实现简单的日历
- JavaScript通过prototype给对象定义属性用法实例
- showModelessDialog()使用详解
- asp.net *.ashx类型的文件使用说明
- php header 详细使用说明与使用心得第1/2页
- php魔术方法与魔术变量、内置方法与内置变量的深入分析
- 解析Python中的生成器及其与迭代器的差异
- Python中转换角度为弧度的radians()方法
- MySQL数据库远程连接开启方法
- QString和char以及string之间的赋值详解
- php实现上传图片生成缩略图示例
- Bootstrap作品展示站点实战项目2
- 可拖动可改变大小div的实现代码
- Bootstrap3学习笔记(二)之排版
- 主板之固态电容优点分析
- 转载认识硬盘术语之一
- 新学到的一招之单空间绑多域名实现提速
- Windows快捷键大全