PostgreSQL源码分析
文章平均质量分 79
Postgresql中国用户会
Postgresql中国用户会致力于PostgreSQL在中国的推广
主要负责PostgreSQL各大会议在中国的信息发布,技术牛文的推广。
展开
-
PostgreSQL Why checkpointer impact performance so much ? - 4
这一篇主要谈一下和检查点相关的几个跟踪。1. 锁等待次数和时间的跟踪。2. 刷新缓存相关函数的时间跟踪。从这些跟踪结果来反映检查点对数据库性能的影响。先整理一下检查点相关的一些探针,如果不能满足跟踪的需求,可以再自定义添加:刷事务提交日志相关的探针结构,了解结构对我们计算时间很有帮助:CheckPointCLOG@src/backend/access/transam/c转载 2015-10-14 20:16:37 · 434 阅读 · 0 评论 -
vitesse X use llvm speed up postgresql
ComparisonFeatureVitesse XVitesse DBDetailsSubscription Pricing$1,000/instance$1,000/coreAnnual license with email supported included.Speed18X转载 2015-10-14 20:35:38 · 655 阅读 · 0 评论 -
为什么PostgreSQL查询语句也可能产生 xlog, 并且可能对buffer有write操作 ? hint bits
本文还可以回答另一个问题,为什么数据库开启wal_hint_log后或者使用initdb -k参数开启checksum后,产生的XLOG变多了。PostgreSQL 查询是可能产生XLOG的,这需要从PostgreSQL tuple上的hint bits说起。什么是hint bits?你可以参考这个页面:https://wiki.postgresql.org/w转载 2015-10-14 20:44:31 · 1386 阅读 · 0 评论 -
PostgreSQL 多字节字符集合法性检测
前面转了一篇关于字符编码的文章,有兴趣的朋友可以阅读一下。http://blog.163.com/digoal@126/blog/static/163877040201581133017855/本文介绍一下PostgreSQL是如何检查多字节字符的合法性的,以及在字符集之间是如何转换的?我们以UTF8为例,先看看它的编码规则。UTF-8是unicode编码的实现方式转载 2015-10-14 20:47:29 · 1207 阅读 · 0 评论 -
Greenplum开源啦,就今天,就现在 Postgres2015全国用户大会将于11月20至21日在北京丽亭华苑酒店召开。本次大会嘉宾阵容强大,国内顶级PostgreSQL数据库专家将悉数到场,并特
PostgreSQL 2015 全国用户大会开始报名了,大会邀请了日本Postgres-XC项目发起人铃木,pgpool作者石井达夫,及国内来自平安银行,阿里巴巴、腾讯、百度、浙江移动、莲子等PG内核和应用方面的专家分享。地点:北京丽亭华苑酒店,10月15日前购票还能享受6折优惠,活动详见:http://postgres2015.eventdove.com/Postgres20原创 2015-10-28 10:47:14 · 1660 阅读 · 0 评论 -
pg_clog的一致性 & 异步事务提交
异步提交是指不需要等待事务对应的wal buffer fsync到磁盘,即返回,而且写CLOG时也不需要等待XLOG落盘。而pg_clog和pg_xlog是两部分存储的,那么我们想一想,如果一个已提交事务的pg_clog已经落盘,而XLOG没有落盘,刚好此时数据库CRASH了。数据库恢复时,由于该事务对应的XLOG缺失,数据无法恢复到最终状态,但是PG_CLOG却显示该事务已提交,原创 2015-10-14 20:42:31 · 1588 阅读 · 0 评论 -
PostgreSQL return result "row by row" or "once all"? please see pg driver
在PostgreSQL中, 执行一条SQL语句时, 数据是一次性返回还是逐条返回显示的呢?这里有一个问题, 如果是逐条返回, 可能返回到中途时出现异常例如网络中断, 那么客户端需要有处理这种异常的能力.而如果是一次性返回所有结果集的话, 即数据库驱动将所有数据保存到本地后返回给客户端, 那么不会出现上述问题, 但是其他问题又来了, 如果结果集很大的话, 要等到第一条数据的显示可能要转载 2015-10-14 20:10:00 · 985 阅读 · 0 评论 -
PostgreSQL Why checkpointer impact performance so much ? - 1
检查点,通俗的理解就是数据库处于数据一致性,完整性的点。因此在这个点之前提交的事务确保数据已经写入数据文件,事务状态已经写入pg_clog文件。通常创建检查点会需要一个漫长的过程,那么怎么保证数据的一致性和完整性呢?从数据恢复(XLOG)的角度来看,检查点在XLOG文件中分为两个位置,一个是逻辑位置,一个是物理位置。逻辑位置即开始位置,也是一致性位置,在这个位置之前转载 2015-10-14 20:12:10 · 884 阅读 · 0 评论 -
Why PostgreSQL stream replication standby so fast
PostgreSQL 流复制以及基于流复制的standby 延迟可以控制在微秒级别,为什么能有这么好的表现呢?这主要和它的复制原理有关,因为它是基于BLOCK变更的复制和恢复。主节点(或上游节点)产生的xlog会在每次xlog flush或write后立即让wal sender进程触发读取xlog并发送到wal receiver端。因此产生XLOG和发送XLOG的过程是连续的。转载 2015-10-14 20:23:56 · 341 阅读 · 0 评论 -
除了xlog,哪些操作可能还需要fsync ?
我们知道xlog的一个重要责任是用来保护用户提交的事务在数据库的持久化特性的。那么就涉及到用户提交事务后,必须先等待这笔事务对应的XLOG fsync完成。所以xlog会涉及不断的fsync(由wal writter间歇性发起,用户进程仅仅在申请不到XLOG BUFFER时会调用fsync) (http://blog.163.com/digoal@126/blog/static/1638转载 2015-10-14 20:31:05 · 386 阅读 · 0 评论 -
PostgreSQL pg_clog fsync 频率分析
在前面介绍过PostgreSQL除了XLOG以外,还有一些操作是需要调用fsync的。http://blog.163.com/digoal@126/blog/static/1638770402015840480734/其中之一是pg_clog,本文主要分析一下pg_clog是在什么时候需要调用fsync的?引用wiki里的一段pg_clog的介绍。htt转载 2015-10-14 20:36:38 · 935 阅读 · 0 评论 -
Get stream replication state from standby
本文的目的是在standby节点获得几个stream replication相关的信息,从而判断当前standby节点的状态:wal receiver进程启动时间,wal receiver进程状态,wal receiver进程的PID,wal receiver进程连接到上游节点的连接信息,接收到的XLOG的最大的地址,已恢复的XLOG的最转载 2015-10-14 20:49:00 · 371 阅读 · 0 评论 -
PostgreSQL extend function - C example
用C写PostgreSQL扩展,有很多例子可以参考。其中一些来自PostgreSQL的contrib, 还有一些来自PostgreSQL自身的adt函数。当然你还可以去pgfoundry和pgxn还有github上找到很多例子。以PostgreSQL自己提供的函数为例,看看如何找到自己需要的例子,例如我要写返回record类型的函数查找这些例子postgre转载 2015-10-14 20:46:46 · 951 阅读 · 0 评论 -
PostgreSQL Why checkpointer impact performance so much ? - 6
本文将揭开checkpoint带来的性能影响的原因,和写full page XLOG有关系,另外和IO有轻微关系(前面已经讨论过,只要你的系统IO能力强,可以忽略IO的影响,参考http://blog.163.com/digoal@126/blog/static/163877040201541134842882/)。本文要说的是full page write的影响,这个影响实际上是非常大的。转载 2015-10-14 20:20:52 · 571 阅读 · 0 评论 -
PostgreSQL 回归测试
回归测试是PostgreSQL的测试方法之一。回归测试,需要事先定义好测试脚本(通常是SQL脚本,放在sql目录中),同时定义好调用执行测试脚本的预期正确输出文件(通常放在expected目录中)。测试使用make check或make installcheck进行,它会通过pg_regress程序调用sql目录中的SQL,并收集输出结果(通常放到results目录中),最后pg_转载 2015-10-14 20:33:03 · 2116 阅读 · 0 评论 -
PostgreSQL C代码覆盖率测试(gcov, lcov)
通常我们评判一个test case好坏的标准之一是代码的覆盖率,一个好的test case应该覆盖到所有的代码。那么问题来了,我们怎么知道这个test case有没有覆盖到所有的代码呢?以C代码为例,我们看看如何检测代码覆盖率。其他语言自然有其他语言的代码覆盖测试工具,例如plpgsql:http://blog.163.com/digoal@126/blog/static/转载 2015-10-14 20:33:54 · 833 阅读 · 0 评论 -
population & sample covariance, standard deviation Aggregate in PostgreSQL
PostgreSQL自带了一些常用的统计学聚合函数, 非常好用.本文介绍一下方差和标准差的一些聚合函数.总体方差 : population covariance总体标准差 : population standard deviation样本方差 : sample covariance样本标准差 : sample standard devia转载 2015-10-14 21:00:19 · 906 阅读 · 0 评论 -
PostgreSQL Why checkpointer impact performance so much ? - 2
接着上一篇讲解检查点最重的操作CheckPointGuts@src/backend/access/transam/xlog.c。http://blog.163.com/digoal@126/blog/static/163877040201542103933969/检查点最重量级的函数如下:CheckPointGuts@src/backend/access/transam/xlo转载 2015-10-14 20:13:57 · 520 阅读 · 0 评论 -
PostgreSQL Why checkpointer impact performance so much ? - 3
接着上一篇,http://blog.163.com/digoal@126/blog/static/1638770402015463252387/这篇主要谈一下CheckPointBuffers(flags).CheckPointBuffers(flags)@src/backend/storage/buffer/bufmgr.c/* * CheckPointBuffe转载 2015-10-14 20:14:55 · 474 阅读 · 0 评论 -
PostgreSQL Why checkpointer impact performance so much ? - 5
我们前面分析了checkpoint的原理,并且对整个过程checkpoint了跟踪,但是并未发现到底是什么造成tps的下降。http://blog.163.com/digoal@126/blog/static/16387704020154653422892/本文主要针对PostgreSQL的lwlock重点跟踪一下:src/backend/storage/lmgr/lwlo转载 2015-10-14 20:19:46 · 522 阅读 · 0 评论 -
PostgreSQL How to get upstream node conninfo from standby node
在PostgreSQL的upstream节点可以获得downstream节点的连接信息,当downstream节点主动连接upstream节点时,在upstream节点会有一个sender process负责发送XLOG信息,而这个sender进程其实就是backend process,在pg_stat_activity中可以查看。pg_stat_replication的视图定义如下:转载 2015-10-14 20:45:13 · 847 阅读 · 0 评论 -
pg_basebackup 不备份哪些文件
pg_basebackup是PostgreSQL提供的基础备份工具,用户可以使用这个工具来实现对数据库的基础备份,当然你也可以使用pg_start_backup()+copy+pg_stop_backup()的方式进行备份。那么pg_basebackup会帮你过滤哪些文件,或者不备份哪些文件呢?1. pgssql_tmp开头的临时目录中的文件2. postgresql.auto转载 2015-10-14 20:51:08 · 878 阅读 · 0 评论 -
pg_multixact manager for shared-row-lock implementation
multixact是管理共享行锁的基础代码,一个MultiXactId对应一个MultiXactMember数组,每个MultiXactMember包含事务号以及该事务号对应的flag(MultiXactStatus)。src/include/access/multixact.htypedef struct MultiXactMember{ TransactionId转载 2015-10-14 20:28:49 · 510 阅读 · 0 评论 -
pg_clog的原子操作与pg_subtrans(子事务)
如果没有子事务,其实很容易保证pg_clog的原子操作,但是,如果加入了子事务并为子事务分配了XID,并且某些子事务XID和父事务的XID不在同一个CLOG PAGE时,保证事务一致性就涉及CLOG的原子写了。PostgreSQL是通过2PC来实现CLOG的原子写的。1. 首先将主事务以外的CLOG PAGE中的子事务设置为sub-committed状态。2. 然后将主事务转载 2015-10-14 20:41:32 · 1818 阅读 · 0 评论 -
which xlog fsync method support O_DIRECT bypasses the kernel buffers
PostgreSQL WAL日志的fsync方法较多, 哪些方法支持O_DIRECT呢?所有支持的fsync方法 : #wal_sync_method = fsync # the default is the first option # supported by the o转载 2015-10-14 20:07:48 · 468 阅读 · 0 评论 -
PostgreSQL OID 源码分析
PostgreSQL的许多系统表都用到了OID这个数据类型,OID是一个uint类型,最大可以存储的值为2^32-1/* * Object ID is a fundamental type in Postgres. */typedef unsigned int Oid;很多系统表使用OID作为主键,PostgreSQL 使用GetNewOid函数获取下一个可用的OID,那么怎么转载 2015-10-14 20:50:03 · 1124 阅读 · 0 评论