显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL research

公益是一辈子的事, I'm 德哥@Digoal, Just Do it!

 
 
 
 
 
 
为了让跟多的朋友了解PostgreSQL, 我将这些年对PG的使用和研究做成了一些体系的培训视频和一些专题视频.(免费观看和下载)

希望通过这些视频帮到一些朋友, 同时对视频中的错误点烦请读者指出以更正, 谢谢.

目前在更新的视频是<PostgreSQL 数据库管理 5天>和<PostgreSQL 性能优化 3天>.

在线观看地址 :

http://www.tudou.com/home/digoal/

培训视频源文件以及文档下载地址 : 

http://pan.baidu.com/share/home?uk=1982970774#category/type=0

转载请注明出处.

针对一些网友的反馈, 重新设计的培训内容如下, 由浅入深, 适合不同的人群. 包含

<PostgreSQL发展历程,社区介绍,资源介绍 2小时>

<PostgreSQL SQL基础 2天>

<PostgreSQL 数据库管理 3天>

<PostgreSQL 数据库备份与恢复, 数据复制, 负载均衡与高可用 3天>

作者  | 2014-2-22 10:19:30 | 阅读(14945) |评论(64) | 阅读全文>>

[置顶] 给PostgreSQL爱好者的参考资料

2011-8-21 8:32:39 阅读57326 评论32 212011/08 Aug21

推荐书籍:

概念书籍:

《PostgreSQL Introduction and Concepts》

开发书籍:

《PostgreSQL开发必备参考手册》

管理类书籍:

《PostgreSQL 9 Administration Cookbook》

《PostgreSQL 9.0 High Performance》

《PostgreSQL Server Programming》

《How PostgreSQL Processes a Query》

了解内核 :

http://www.postgresql.org/developer/backend/

http://wiki.postgresql.org/wiki/Backend_flowchart

《数据库查询优化器的艺术:原理解析与SQL性能优化》 - 海翔老师

《 PostgreSQL 内核分析》 - 彭老师

《从小工到专家》 -  唐成

官方手册:

作者  | 2011-8-21 8:32:39 | 阅读(57326) |评论(32) | 阅读全文>>

PostgreSQL 老湿机图解平安科技遇到的垃圾回收"坑"

2016-8-15 22:54:26 阅读171 评论0 152016/08 Aug15

背景

近日收到 平安科技 海安童鞋 那里反馈的一个问题,在生产环境使用PostgreSQL的过程中,遇到的一个有点"不可思议"的问题。

一张经常被更新的表,通过主键查询这张表的记录时,发现需要扫描异常多的数据块。

本文将为你详细剖析这个问题,同时给出规避的方法,以及内核改造的方法。

文中还涉及到索引的结构解说,仔细阅读定有收获。

原因分析

.1. 和长事务有关,我在很多文章都提到过,PG在垃圾回收时,只判断垃圾版本是否是当前数据库中最老的事务之前的,如果是之后产生的,则不回收。

所以当数据库存在长事务时,同时被访问的记录被多次变更,造成一些垃圾版本没有回收。

.2. PG的索引没有版本信息,所以必须要访问heap tuple获取版本。

复现方法

测试表

de >postgres=# create unlogged table test03 (id int primary key, info text); de>

频繁更新100条记录

de >$ vi test.sql \setrandom id 1 100 insert into test03 values(:id, repeat(md5(random()::text), 1000)) on conflict on constraint test03_pkey do update set info=excluded.info; pgbench

作者  | 2016-8-15 22:54:26 | 阅读(171) |评论(0) | 阅读全文>>

如何防止远程程序与RDS PG连接中断

2016-8-15 22:53:53 阅读65 评论0 152016/08 Aug15

背景

偶尔有用户会遇到远程程序连接RDS PG,在不做任何操作一段时间后可能中断。

其实可能是用户和RDS PG之间,某些网络设备设置了会话空闲超时,会主动中断会话。

那么有什么方法能解决这个问题呢?

运维的同学可能有这方面的经验,例如使用securecrt或者其他终端连接服务器时,可以设置这些管理工具的no-op,周期性的发一些空字符过去,保证会话上有流量。

但是数据库连接怎么搞呢?

PostgreSQL提供了tcp keep alive的参数可供用户设置。

例子

为了避免会话中断的问题, 可以通过tcp层的keepalive机制来达到传输心跳数据的目的.

方法一,设置数据库参数

PostgreSQL支持会话级别的设置, 数据库级别的设置在$PGDATA/postgresql.conf,

建议设置如下三个参数的值

de ># - TCP Keepalives - # see "man 7 tcp" for details tcp_keepalives_idle = 60 # TCP_KEEPIDLE, in seconds; # 0 selects the system default tcp_keepalives_interval = 10 # TCP_KEEPINTVL,

作者  | 2016-8-15 22:53:53 | 阅读(65) |评论(0) | 阅读全文>>

PostgreSQL PL/Perl 钩子安全性分析

2016-8-15 22:53:05 阅读59 评论0 152016/08 Aug15

背景

plperl 是PostgreSQL支持的函数语言之一。

在使用plperl时,可以使用plperl提供的钩子功能,满足一些特殊场景的需求。

钩子分2种,一种是加载plperl.so库时的钩子,一种是加载perl语言解释器时的钩子。

钩子的使用有安全问题吗?

钩子用法介绍加载plperl.so库时的钩子

相关参数

plperl.on_init (string)

de >Specifies Perl code to be executed when a Perl interpreter is first initialized, before it is specialized for use by plperl or plperlu. The SPI functions are not available when this code is executed. If the code fails with an error it will abort the initialization of the interpreter and propagate out to the calling query, causing the current transaction or subtransaction to be aborted. The Perl code is limited to a single string. Longer code can

作者  | 2016-8-15 22:53:05 | 阅读(59) |评论(0) | 阅读全文>>

PostgreSQL Oracle 兼容性 之 - PL/SQL record, table类型定义

2016-8-15 22:52:36 阅读60 评论0 152016/08 Aug15

背景

Oracle PL/SQL是非常强大的一门SQL编程语言,许多Oracle用户也使用它来处理一些要求延迟低且数据一致性或可靠性要求很高的业务逻辑。

PostgreSQL也有一门非常高级的内置SQL编程语言,plpgsql。与Oracle PL/SQL语法极其类似,但是还是有一些不一样的地方。

(PS:除了plpgsql,PostgreSQL还支持C,java,python,perl等流行的语言作为数据库的函数编程语言)

本文是针对有Oracle用户遇到的一些函数语法与PostgreSQL不兼容的地方,给出的修改建议。

涉及type xx is table of xxxx index by binary_integer语法、type xx is record语法。

Oracle PL/SQL 例子de >CREATE OR REPLACE FUNCTION f_xml(p_xml CLOB) RETURN INT AS ... type rec_tk is record ( tkno VARCHAR2(100) , cg_zdj number(12,0) := 0 , cg_jsf number(12,0) := 0 ); type tklist is table of rec_tk index by binary_integer; type rec_cjr is record ( cjrid varchar2(30) , tk tklist ); type cjr is table

作者  | 2016-8-15 22:52:36 | 阅读(60) |评论(0) | 阅读全文>>

连接 0.0.0.0/32 发生了什么

2016-8-15 22:51:58 阅读71 评论0 152016/08 Aug15

根据RFC 3330, 1700 的描述, 0.0.0.0/32 可以用作当前网络的源地址。

de >0.0.0.0/8 - Addresses in this block refer to source hosts on "this" network. Address 0.0.0.0/32 may be used as a source address for this host on this network; other addresses within 0.0.0.0/8 may be used to refer to specified hosts on this network. [RFC1700, page 4]. de>

0.0.0.0/32 作为目标地址使用时,与127.0.0.1含义一样。

但是0.0.0.0还有更多的含义,如下

de >IP address numbers in Internet Protocol (IP) version 4 (IPv4) range from 0.0.0.0 up to 255.255.255.255. The IP address 0.0.0.0 has several special meanings on computer networks. It cannot be used as a general-purpose device address, however. IPv6 networks have a similar concept

作者  | 2016-8-15 22:51:58 | 阅读(71) |评论(0) | 阅读全文>>

PostgreSQL cluster大幅减少nestloop离散IO的优化方法

2016-8-15 22:51:12 阅读90 评论0 152016/08 Aug15

背景

对于较大数据量的表,如果在索引字段上面有小结果集JOIN,用nestloop JOIN是比较好的方法。

但是nestloop带来的一个问题就是离散IO,这个是无法回避的问题,特别是硬件IO能力不行的情况下,性能会比较糟糕。

有什么优化方法呢?

PostgreSQL提供了一个命令,可以修改物理存储的顺序,减少离散IO就靠它了。

例子

创建两张表

de >postgres=# create unlogged table test01(id int primary key, info text); CREATE TABLE postgres=# create unlogged table test02(id int primary key, info text); CREATE TABLE de>

产生一些离散primary key数据

de >postgres=# insert into test01 select trunc(random()*10000000), md5(random()::text) from generate_series(1,10000000) on conflict on constraint test01_pkey do nothing; INSERT 0 6322422 postgres=# insert into test02 select trunc(random()*10000000), md5(random()::text)

作者  | 2016-8-15 22:51:12 | 阅读(90) |评论(0) | 阅读全文>>

[转载]聊聊Greenplum的那些事

2016-8-15 22:50:37 阅读180 评论0 152016/08 Aug15

原文

http://dbaplus.cn/news-21-341-1.html

聊聊Greenplum的那些事

李巍 2016-04-01 14:15:00 1024

开卷有益——作者的话

有时候真的感叹人生岁月匆匆,特别是当一个IT人沉浸于某个技术领域十来年后,蓦然回首,总有说不出的万千感慨。

笔者有幸从04年就开始从事大规模数据计算的相关工作,08年作为Greenplum 早期员工加入Greenplum团队(当时的工牌是“005”,哈哈),记得当时看了一眼Greenplum的架构(嗯,就是现在大家耳熟能详的那个好多个X86框框的图),就义无反顾地加入了,转眼之间,已经到了第8个年头。

在诸多项目中我亲历了Greenplum在国内的生根发芽到高速发展,再到现在拥有一百多个企业级用户的过程。也见证了Greenplum从早期的2.1版本到当前的4.37版本,许多NB功能的不断增强、系统稳定性的不断大幅提高,在Greenplum的发展壮大中,IT行业也发生着巨大的变化,业界潮流沿着开放、开源的方向走向了大数据和云计算时代。由此看出,Greenplum十来年的快速发展不是偶然发生的,这与其在技术路线上始终保持与整个IT行业的技术演进高度一致密不可分的。

多年历练中接触过大大小小几十个数据类项目,有些浅尝辄止(最短的不到一周甚至还有远程支持),有些周期以年来计(长期出差现场、生不如死),客观来说, 每个项目都有其独一无二的的特点,只要有心,你总能

作者  | 2016-8-15 22:50:37 | 阅读(180) |评论(0) | 阅读全文>>

阿里云数据库Greenplum版发布啦

2016-8-15 22:49:54 阅读90 评论2 152016/08 Aug15

经过阿里云ApsaraDB小伙伴们几个月的不懈努力,Greenplum 终于上云了。

(这里有PostgreSQL内核小组的宇宙第一小鲜肉,还有宇宙无敌老腊肉)

云数据库Greenplum版(ApsaraDB for Greenplum)是基于Greenplum开源数据库项目的MPP大规模并行处理数据仓库产品,提供全面的SQL支持(包括符合SQL2008标准的OLAP分析函数),业界流行的BI软件都可以直接使用Greenplum进行在线业务分析。支持行存储和列存储混合模式,提高分析性能;同时提供数据压缩技术,降低存储成本。支持XML、GIS地理信息、模糊字符串等丰富的数据类型,为物联网、互联网、金融、政企等行业提供丰富的业务分析能力。

Greenplum从2008年在国内推广以来,生态已经非常的成熟,在 运营商、金融、物流、公安、政府、互联网 等行业都有非常庞大的用户群体。

从百TB到PB的OLAP仓库,Greenplum无疑是非常好的选择。

阿里云并不是简单的将Greenplum云化,还添加了一些非常贴地气的特性:

内核增强支持插件 oss_ext、PostGIS、orafunc(Oracle兼容包)、DBLINK、MADlib(机器学习方面的函数库)、fuzzystrmatch插件,字符串模糊匹配;

(OSS_EXT插件,读取存放在OSS(Open Storage Service)上的文件。)支持 create extension 语法创建插件

作者  | 2016-8-15 22:49:54 | 阅读(90) |评论(2) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
 

浙江省 杭州市 狮子座

 发消息  写留言

 
PostgreSQL 高校实验室,企业,社区大联盟才是未来的方向.
 
QQ276732431
E-Mail digoal@126.com
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 

日志分类

 
 
日志分类列表加载中...
 
 
 
 
 

FlagCounter

 
 
模块内容加载中...
 
 
 
 
 

新浪微博

 
 
模块内容加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
心情随笔列表加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016

注册 登录  
 加关注