聊聊PostgreSQL 14 internal这本书
1前言
各位公众号的读者们,好久不见,距离上一次发文还是上一次。今天我们不聊技术不聊故障,就聊聊《PostgreSQL 14 internal》这本书(不少读者和我反馈故障写多了是不是变相劝退🤨)。在今天,我也终于将初稿全部翻译完成了,统计了一下,初稿总计159513个字,工作量确实不小。
从最开始萌生翻译的想法,到说干就干,耗时总共约七个月,今天终于完成了初稿的翻译,特以此篇纪念一下。
这本书是PostgresPro团队的著作,也是市面上难得讲解系统内核的书籍,另外一本比较出名的是SUZUKI 的《The Internals of PostgreSQL》,已经由冯若航、升爷等人翻译成中文。既然涉及到内核原理,里面也难免会涉及到大量的源码,因此接下来还得花费大量时间去审核校稿,快的话预计年底就能正式与各位读者见面。那么这本书有哪些吸引我的地方呢?简单聊几句吧。
2推荐理由
从这本书中,你能学到很多实用的技巧,比如观察云里雾里的infomask:
比如原理性的页剪枝与索引剪枝,什么时候会做索引剪枝?
又比如鲜为人知的堆截断,其实也有一个超时时间:
/*
* Timing parameters for truncate locking heuristics.
*
* These were not exposed as user tunable GUC values because it didn't seem
* that the potential for improvement was great enough to merit the cost of
* supporting them.
*/
#define VACUUM_TRUNCATE_LOCK_CHECK_INTERVAL 20 /* ms */
#define VACUUM_TRUNCATE_LOCK_WAIT_INTERVAL 50 /* ms */
#define VACUUM_TRUNCATE_LOCK_TIMEOUT 5000 /* ms *//*
* Space/time tradeoff parameters: do these need to be user-tunable?
*
* To consider truncating the relation, we want there to be at least
* REL_TRUNCATE_MINIMUM or (relsize / REL_TRUNCATE_FRACTION) (whichever
* is less) potentially-freeable pages.
*/
#define REL_TRUNCATE_MINIMUM 1000
#define REL_TRUNCATE_FRACTION 16
再之环形缓冲区ring buffer,用于预防缓冲区污染,并且 toast 的读取会绕过 ring buffer(作为下面第一种策略的特例)
在 internal db里面也有所提及
又比如在索引是一致完好的前提下,什么情况下索引扫描和顺序扫描会产生不一致?什么场景下普通的select会和update相互阻塞?以上种种,各位都可以从这本书中窥探一二。
对于内核开发童鞋,也能从中学到索引引擎接口、查询引擎接口等等。
3后续
以上我仅仅列出了部分,更多精彩内容就要各位读者自行挖掘了,英文不太好的同志可以等这本中文版的出版,因为书中涉及到了不少内核细节,加之我本人并非内核出身,所以后续我得找几位内核开发者一起交叉审核一下。
这本书搞完之后,准备再出一本类似《PostgreSQL DBA实战宝典》之类的原创书籍(书名暂定如此),受众主要是DBA与运维,囊括日常故障分析、原理解析和体系架构等,将我多年以来运维PostgreSQL的经验与心得浓缩于书中,拭目以待。