出处http://blog.163.com/digoal@126/blog/static/163877040201172183022203/
给Postgresql爱好者的参考资料
2011-08-21 08:32:39|分类:PostgreSQL|举报|字号订阅
推荐书籍:
概念书籍:
《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 内核分析》 - 彭老师
官方手册:
http://www.postgresql.org/docs/
翰高翻译的中文手册:
http://www.highgo.com.cn/hgdb/docs
培训类PPT:
《Postgresql Inside 系列》
《Postgresql DBA培训PPT》
代码树:
http://doxygen.postgresql.org/
代码提交集:
https://commitfest.postgresql.org/
项目GIT:
Postgresql GITHUB镜像
https://github.com/postgres/postgres
Postgresql JDBC 驱动:
http://jdbc.postgresql.org/development/privateapi/
Postgresql ODBC 驱动:
http://www.postgresql.org/ftp/odbc/versions/src/
GUI工具(pgAdmin):
安全漏洞:
http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=postgresql
中文社区:
中文官网:
国外FAQ社区,BLOG:
http://stackoverflow.com/questions/tagged/postgresql
http://blog.2ndquadrant.com/en
其他推荐网站:
http://mariposa.cs.berkeley.edu/
http://wiki.postgresql.org/wiki/Todo
http://wiki.postgresql.org/wiki/Development_information
https://github.com/aggregateknowledge/postgresql-hll
http://workshops.opengeo.org/postgis-intro/
http://www.opengeospatial.org/
https://developers.google.com/
http://www.informationweek.com/
http://aws.amazon.com/redshift/
http://sourceforge.net/projects/postgres-xc/
http://research.google.com/index.html
http://postgresql.1045698.n5.nabble.com/
http://blog.163.com/digoal%40126
推荐Postgresql 专业QQ群:
3336901
书籍打包下载:
如有需要请联系QQ: 276732431,或留言留下您的邮箱. 文件超过100MB,邮箱需要支持大附件才能接收.
或者到以下网盘下载.
http://yun.baidu.com/share/link?shareid=3626307544&uk=1982970774
Postgresql 培训视频
http://www.tudou.com/home/digoal
视频下载地址
http://blog.163.com/digoal@126/blog/static/16387704020141229159715/
Postgresql TODO & 软肋,
大多数软件都有坑,如果把握不好,那就掉坑里去了,Postgresql亦如此,为避免初次接触Postgresql的朋友掉坑里去,这里罗列了一些Postgresql的软肋和TODO,大家可以参考一下.
todo
1. http://wiki.postgresql.org/wiki/Todo
2. 基于WAL的多主复制(9.4可能会实现)
4. shared nothing 架构(目前需要插件来实现如plproxy,pgpool-ii)
5. 基于块的增量基础备份(目前只有基于WAL的增量备份)
6. query cache,如count(*)性能提升
7. toast 阈值可配置(目前只能在编译时指定)
8. 使用ssd作为二级缓存
9. Postgresql 目前一个集群只支持1个block_size,这种不利于复杂场景的使用,例如我们在同一个数据库中有大量的OLTP请求,同时还有大数据的频繁导入需求的情况下,选择小的block_size或者大的block_size都不合适,如果能针对每个表指定不同的block_size的话可以很好的解决这一的问题. 当然如果数据库中存在不同大小的block_size,那么随之而来的改动是非常大的,例如shared buffer也必须兼容不同大小的block size.
在Oracle 9中,支持一个数据库中存在不同的数据块大小.
10. Postgresql的配置文件是直接编辑的,没有像oracle这样的spfile,当然9.4会支持alter system来修改,但是<=9.3的没有,修改文件容易出错,不安全,错误的话会导致数据库集群无法启动.
11. 目前开源的postgresql不支持函数加密. 安全性较低.
12. 目前移动表空间(如alter table tbl set tablespace newtbs;)会产生大量的XLOG,这个应该是可以优化的.
13. 流复制异步模式下,failover后,可能因为主备xlog的差异需要重做standby. 目前可以通过rsync减少网络传输,或者zfs snapshot来将OLD PRIMARY回退到以前的状态达到切换成standby的目的.
14. 没有表空间配额限制,目前只能通过文件系统使用配额来简单的限制.
15. 没有rotate table,类似mongoDB的capped collection. 限制记录条数,空间,或记录时长,超过限制就覆盖最早的记录 .
16. pg-xc,pg-xl的数据重分布需要将数据从所有的数据节点加载到coordinator后,在按照重分布算法分发到新的所有节点.
17. 同步流复制的一点可能可以改进的地方,例如只有一台standby时,如果standby异常或网络原因导致XLOG无法同步复制到standby并返回Feedback的话,那么在同步提交队列中等待提交的xact将处于等待状态,一般的做法是使用2个或2个以上的standby来防止1个STANDBY故障时可以自动将同步standby节点向下转移,XACT不需要等待. 那么是不是可以有得选择,例如在等待多少秒之后自动切换成异步模式.
18. 目前没有比较好的读写分离或shared-nothing解决方案,例如
1. 通过中间件pgpool-II构建读写分离,但是pgpool-II目前稳定性,性能(tps)都不尽人意.
2. 使用pg-xc构建的shared-nothing,性能(TPS)损耗太大,同时全局一致性还原(PITR)目前还只有停留在创建barriers,粒度无法达到gxid的粒度(因为每个节点各管各自的XID).
3. 使用plproxy构建shared-nothing,性能损失小,但是没有跨节点事务能力,当然如果应用层愿意使用 2PC来实现的话,也是可以的. 另外,接口必须是PLPROXY函数,所以对应用来说适配较差.
软肋
1. 读写并发管理通过新增行版本实现,会带来垃圾数据,对于非HOT更新的话,还会引起索引更新,导致索引更容易膨胀.
2. 显然这种MVCC机制不利于频繁更新的应用场景,同一条记录被更新10次的话,会产生10个版本的写xlog和heap page的IO,同时在VACUUM的时候还需要写xlog以及heap page的IO. 这10个版本可能并不会同时存在,但是却实实在在的产生了这些写IO.
3. 通过xid来识别版本,且xid是32位存储,XID是需要复用的,所以经过一定的事务分配后需要freeze,当然此MVCC机制的好处也是有的,例如锁粒度很小,容易实现repeatable read和ssi. 会话层可实现跨越会话的一致性镜像等.
4. 同样MVCC带来的问题,在大数据库中使用逻辑备份时(),备份开始后产生的垃圾数据都无法被回收,如果备份时间很长,将导致数据库膨胀比较厉害,同时也会影响对象的freeze. 所以对大库建议使用pitr备份方式.
5. one-by-one的扩展数据块使得对同一个对象进行大批量的并行数据导入的时候(例如并行COPY)会产生extend锁等待问题. 影响导入性能. 参见 :http://blog.163.com/digoal@126/blog/static/163877040201392641033482
海翔老师发来一些互联网上收集到的问题,我谨表明下个人观点.
对Postgresql数据库有一定了解,或者尝到甜头的朋友大多都会有这样的疑问,0);">为什么好用却没有MysqL流行呢?
1 PG没流行的原因
因为没有使用过,0);"> 所以不太好回答.
2的优势有哪些?(请例举您认为的最优优势的5条,降序排列)
1.社区活跃(每天都有commit每年全球大会,0);">每年全球地方性会议等),0);">运作稳定(主要贡献者来自全球的诸多行业的诸多企业,0);">不会出现一家独控的局面),0);"> git版本管理,0);"> wiki知识库管理,0);"> BSD许可.
2.血统纯正,0);">以及丰富的第三方插件. 的分支只有1个,0);">不会出现分支众多,0);">版本不统一的情况.第三方插件非常多,0);">基本上都来自实际的需求.
postgresql插件的使用非常简单,0);">因为是模块化形式的,0);">安装好后,0);">加载到动态链接库即可.(包括性能,0);">功能扩展,0);">融合,0);">管理等方面的插件.)
3.流复制,0);">外部表接口,0);"> MPP shared nothing
PG的流复制是基于块的变更,0);">速度极其之快,0);">局域网内能实现毫秒级的延迟,0);">广域网也不需要担心网络稳定性,0);">因为是续传的.流复制可用于HA容灾,0);">读写分离等场景.
9.4版本还会引入逻辑流复制,0);">可用于multi master的场景.
支持外部表接口,0);">在中可以直接读写其他数据源的数据,0);">如Oracle.适合混杂场景的使用,0);">或者数据迁移场景的使用.
MPP的第三方插件或者第三方商业软件可以实现的功能,0);">例如GreenPlumPgPOOL-II pgxc citusDB postgresxl等,0);">还可以结合HADOOP来使用.
shared nothing postgresql第三方插件可以方便的实现例如plproxy pgpoolii等.
4.数据类型丰富,0);">索引类型丰富,0);">可动态加载的模块,0);">丰富的服务端函数
的数据类型非常的丰富,0);">同时支持自定义类型.除了传统的数据类型之外,0);">还支持例如range类型,0);"> IP HSTORE JSON
的索引访问接口也非常丰富,0);">例如支持btree hash gist gin spgist等诸多索引访问接口.
用户可自定义一些库,0);">在需要使用时动态加载.同时支持自定义钩子应用的场景(_PG_init()).
丰富的服务端函数,0);">plpgsql plpython plperl pltcl plR pljava plv8 C等.适用各种开发人员使用.
5.兼容性,0);">稳定性,0);">可靠性,0);">性能,0);">后期维护,0);">审计需求等.
的兼容性非常好,0);">支持几乎所有的硬件架构和操作系统.
稳定,0);">可靠,0);">性能卓越.
维护简单,0);">诸多功能可以满足审计需求.
3在互联网/传统行业(有事务需求)/或其它行业的未来?
国内圈子越来越活跃,0);">包括传统行业,0);">金融行业,0);">运营商,0);">互联网行业,0);">政府都有使用.
由于数据库在业务系统中的重要性,0);">一般曾经未使用的公司会从不太重要的新项目着手尝试使用尝到甜头后才会有后续大规模应用的动作.
老的项目,0);">从其他数据库迁移到的,0);">肯定是这些已有的数据库无法满足现阶段或未来的需求.例如可能是迫于成本的考虑,0);">又或者项目中依赖的一些特性.