PostgreSQL指南:内幕探索pdf下载pdf下载

PostgreSQL指南:内幕探索百度网盘pdf下载

作者:
简介:本篇主要提供PostgreSQL指南:内幕探索pdf下载
出版社:电子工业出版社
出版时间:2019-06
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

编辑推荐

适读人群 :中高级 PostgreSQL 数据库 DBA、PostgreSQL 内核开发者、以 PostgreSQL 为 基础数据库的应用系统研发人员。

《PostgreSQL指南:内幕探索》深受PostgreSQL开发者瞩目,全面诠释了 PostgreSQL 数据库系统的整体架构及各个模块!

内容简介

  本书介绍了 PostgreSQL 内部的工作原理,包括数据库对象的逻辑组织与物理实现,进程与内存的架构。并依次剖析了几个重要的子系统:查询处理、外部数据包装器、并发控制、清理过程、缓冲 区管理、WAL、备份及流复制。本书为 DBA 与系统开发者提供了一幅全景概念地图,有助于读者形 成对数据库实现的整体认识,亦可作为深入学习 PostgreSQL 源代码的导读手册,对于理解数据库原 理与 PostgreSQL 内部实现大有裨益。 本书适合数据库开发人员及相关领域的研究人员、数据库 DBA 及高等院校相关专业的学生阅读。

作者简介

  Hironobu Suzuki (铃木启修)
  毕业于北海道大学信息工程研究生院,获得信息工程硕士学位,曾在多家公司担任软件开发人员和技术经理/技术主管。在数据库和系统集成领域出版了7本书。
  2010年—2016年担任日本PostgreSQL用户组的主任,连续7年组织了日本PostgreSQL技术研讨会,并担任日本2013年PostgreSQL大会的委员会主席。

内页插图

精彩书评

  PostgreSQL作为一款学院派的数据库产品,对学习数据库实现原理有很好的教学意义。近些年来,其在商业场景中也获得越来越多的用户支持。该书对PostgreSQL若干个关键点进行了浅显易懂的讲解,相信能够对想要了解PostgreSQL数据库的人士有很大帮助。
  —— 陈红
  中国人民大学信息学院教授
  
  
  从我接触和学习数据库开始,就非常希望了解每种数据库的内部运行或者实现机制。只有这样才能发挥每种数据库的价值。数据库从来就不是黑盒子,对于开发人员来说,了解数据库的内部机制,可以进行高效的应用设计,写出高性能的SQL语句;对于运维人员来说,可以针对性地进行性能优化,快速地对问题进行分析、定位和解决。这本书能够满足广大PostgreSQL数据库爱好者此方面的需求。感谢译者翻译如此有用的一本书,供国内的PostgreSQL从业者学习。
  —— 汪洋
  平安云数据库及存储产品团队总经理
  
  
  介绍PostgreSQL内部机制的书较少,本书选取了几个关键的切入点,介绍了PostgreSQL的内部机制。本书特别适合有一定的PostgreSQL使用和管理经验的人士来梳理自己的知识脉络,从而达到“温故而知新”的效果。相信本书能够对PostgreSQL从业人士有所帮助。
  —— 赵振平
  太阳塔科技CTO
  PostgreSQL中国社区主席
  
  
  这是一本介绍PostgreSQL内部机制的好书,全面揭示了数据存储形式、进程架构、查询处理、并发控制等核心组件的奥秘,同时也覆盖了FDW、流复制等常用特性。本书译者之一张文升先生是我多年的好友,在PostgreSQL领域有深厚的经验积累,相信本书能为数据库从业者打开一扇通往PostgreSQL“内心”深处的门。
  —— 彭煜伟(博士)
  武汉大学计算机学院副教授
  《PostgreSQL数据库内核分析》一书作者《由浅入深PostgreSQL》等书译者
  
  
  本书系统地介绍了PostgreSQL体系架构和技术内幕,是一本不可多得的学习PostgreSQL内部原理的佳作。
  —— 谭峰
  《PostgreSQL实战》作者之一
  
  
  《PostgreSQL指南:内幕探索》通过从用户使用较多的数据库、表结构操作基础,到高级DBA所需了解的方方面面,全面诠释了 PostgreSQL 数据库系统的整体架构及各个模块,通过图文并茂的方式进行清晰的解说。原作者Hironobu Suzuki及译者之一张文升分别是日本及中国 PostgreSQL 社区的核心成员,对于想要了解 PostgreSQL 内部结构的读者,这是一本十分值得品读的作品。
  —— 萧少聪
  PostgreSQL中国社区2015—2018届主席

目录

目录

第1章 数据库集簇、数据库和数据表... 1

1.1 数据库集簇的逻辑结构... 1

1.2 数据库集簇的物理结构... 2

1.2.1 数据库集簇的布局... 3

1.2.2 数据库布局... 4

1.2.3 表和索引相关文件的布局... 5

1.2.4 PostgreSQL中表空间的布局... 7

1.3 堆表文件的内部布局... 8

1.4 读写元组的方式... 11

1.4.1 写入堆元组... 11

1.4.2 读取堆元组... 12

第2章 进程和内存架构... 14

2.1 进程架构... 14

2.1.1 Postgres服务器进程... 15

2.1.2 后端进程... 15

2.1.3 后台进程... 16

2.2 内存架构... 17

2.2.1 本地内存区域... 17

2.2.2 共享内存区域

第3章 查询处理... 19

3.1 概览... 20

3.1.1 解析器... 20

3.1.2 分析器... 22

3.1.3 重写器... 24

3.1.4 计划器与执行器... 25

3.2 单表查询的代价估计... 27

3.2.1 顺序扫描... 28

3.2.2 索引扫描... 29

3.2.3 排序... 36

3.3 创建单表查询的计划树... 38

3.3.1 预处理... 41

3.3.2 找出代价最小的访问路径... 42

3.3.3 创建计划树... 51

3.4 执行器如何工作... 55

3.5 连接... 57

3.5.1 嵌套循环连接... 57

3.5.2 归并连接... 63

3.5.3 散列连接... 67

3.5.4 连接访问路径与连接节点... 73

3.6 创建多表查询计划树... 76

3.6.1 预处理... 76

3.6.2 获取代价最小的路径... 77

3.6.3 获取三表查询代价最小的路径... 81

参考文献... 83

第4章 外部数据包装器... 84

4.1 概述... 85

4.1.1 创建一棵查询树... 86

4.1.2 连接至远程服务器... 86

4.1.3 使用EXPLAIN命令创建计划树(可选)... 87

4.1.4 逆解析... 87

4.1.5 发送SQL命令并接收结果... 88

4.2 postgres_fdw的工作原理... 90

4.2.1 多表查询... 91

4.2.2 排序操作... 97

4.2.3 聚合函数... 98

第5章 并发控制... 101

5.1 事务标识... 103

5.2 元组结构... 104

5.3 元组的增、删、改... 106

5.3.1 插入... 106

5.3.2 删除... 107

5.3.3 更新... 108

5.3.4 空闲空间映射... 109

5.4 提交日志... 110

5.4.1 事务状态... 110

5.4.2 提交日志如何工作... 110

5.4.3 提交日志的维护... 111

5.5 事务快照... 111

5.6 可见性检查规则... 114

5.6.1 t_xmin的状态为ABORTED.. 115

5.6.2 t_xmin的状态为IN_PROGRESS. 115

5.6.3 t_xmin的状态为COMMITTED.. 116

5.7 可见性检查... 118

5.7.1 可见性检查的过程... 118

5.7.2 PostgreSQL可重复读等级中的幻读... 122

5.8 防止丢失更新... 122

5.8.1 并发UPDATE命令的行为... 123

5.8.2 例子... 125

5.9 可串行化快照隔离... 127

5.9.1 SSI实现的基本策略... 127

5.9.2 PostgreSQL的SSI实现... 128

5.9.3 SSI的原理... 129

5.9.4 假阳性的串行化异常... 132

5.10 需要的维护进程... 134

参考文献... 136

第6章 清理过程... 137

6.1 并发清理概述... 138

6.1.1 第一部分... 139

6.1.2 第二部分... 140

6.1.3 第三部分... 140

6.1.4 后续处理... 141

6.2 可见性映射... 141

6.3 冻结过程... 142

6.3.1 惰性模式... 142

6.3.2 迫切模式... 143

6.3.3 改进迫切模式中的冻结过程... 146

6.4 移除不必要的CLOG文件... 147

6.5 自动清理守护进程... 148

6.6 完整清理... 148

第7章 堆内元组和仅索引扫描... 153

7.1 堆内元组... 153

7.1.1 没有HOT时的行更新... 153

7.1.2 HOT如何工作... 154

7.2 仅索引扫描... 157

第8章 缓冲区管理器... 160

8.1 概览... 161

8.2 缓冲区管理器的结构... 163

8.2.1 缓冲表... 164

8.2.2 缓冲区描述符... 165

8.2.3 缓冲区描述符层... 167

8.2.4 缓冲池... 169

8.3 缓冲区管理器锁... 169

8.3.1 缓冲表锁... 170

8.3.2 缓冲区描述符相关的锁... 170

8.4 缓冲区管理器的工作原理... 174

8.4.1 访问存储在缓冲池中的页面... 174

8.4.2 将页面从存储加载到空槽... 175

8.4.3 将页面从存储加载到受害者缓冲池槽... 176

8.4.4 页面替换算法:时钟扫描... 178

8.5 环形缓冲区... 180

8.6 脏页刷盘... 181

第9章 WAL. 182

9.1 概述... 183

9.1.1 没有WAL的插入操作... 183

9.1.2 插入操作与数据库恢复... 184

9.1.3 整页写入... 186

9.2 事务日志与WAL段文件... 188

9.3 WAL段文件的内部布局... 190

9.4 WAL记录的内部布局... 191

9.4.1 WAL记录首部部分... 191

9.4.2 XLOG记录的数据部分(9.4及更低版本)... 193

9.4.3 XLOG记录的数据部分(9.5及更高版本)... 196

9.5 WAL记录的写入... 200

9.6 WAL写入进程... 203

9.7 PostgreSQL中的检查点进程... 203

9.7.1 检查点进程概述... 204

9.7.2 pg_crontrol文件... 205

9.8 PostgreSQL中的数据库恢复... 206

9.9 WAL段文件管理... 209

9.9.1 WAL段切换... 209

9.9.2 WAL段管理(9.5及更高版本)... 209

9.9.3 WAL段管理(9.4及更低版本)... 211

9.10 持续归档与归档日志... 212

第10章 基础备份与时间点恢复... 214

10.1 基础备份... 215

10.1.1 pg_start_backup. 215

10.1.2 pg_stop_backup. 217

10.2 时间点恢复(PITR)的工作原理... 217

10.3 时间线与时间线历史文件... 220

10.3.1 时间线标识... 220

10.3.2 时间线历史文件... 221

10.4 时间点恢复与时间线历史文件... 222

第11章 流复制... 224

11.1 流复制的启动... 225

11.2 如何实施流复制... 227

11.2.1 主从间的通信... 227

11.2.2 发生故障时的行为... 229

11.3 管理多个备库... 229

11.3.1 同步优先级与同步状态... 229

11.3.2 主库如何管理多个备库... 230

11.3.3 发生故障时的行为... 231

11.4 备库的故障检测... 232


前言/序言

  中国的PostgreSQL用户们:
  你们好!
  本书详细解释了PostgreSQL的内部工作细节,目标读者为DBA与系统开发人员。理解数据库内部机制很有挑战,愿本书能在你们精通PostgreSQL的道路上有所助益。
  本书能出中文版,我真的感到非常高兴,我这样认为是有原因的。
  首先,这是我写的书中第一本被翻译的。当自己的书出版时,心情愉悦自不必说,而自己的作品能被翻译出版,更是一件非常令人激动的事情。
  其次,我收到了来自世界各地的电子邮件,请求将这本书翻译成各种语言。实际上,至少有一半的邮件来自中国。许多邮件提及“这本书对中国PostgreSQL用户而言很有帮助”,因此,我很高兴终于能对他们的要求做出回应。
  而最重要的原因与我的家族史有关。先父曾在中国的哈尔滨市住过几年,此后他回到日本,我出生了。他患心脏病很长时间,因此在我的印象中,他的心情总是不好,除了提到一件事时。
  当我还是孩子的时候,每晚睡觉前父亲都会给我和妹妹讲他在中国的经历。在讲这些经历时,他总是显得非常高兴,经常说中国人民帮助了他。
  他的故事给我留下了深刻的印象,当然也影响了我的人生。因为这些故事,我从小就对这个世界和未知的事物有强烈的好奇心,而我的好奇心也引领我走入软件工程领域。现在,我已经在中国出版了第一本书。简而言之,这是一个关于在日本家庭与中国之间传递爱的故事。
  我很高兴终于可以回报中国人民了。当然,这本书只是一份很小的礼物,然而我想充满感激之情地将它献给您。
  2017年,我有幸访问中国,亲眼目睹了中国令人惊叹的发展。对我而言,这是一次非常难忘的经历。我希望能再去中国,如果有机会,我还想在中国工作。
  无论如何,让我们享受PostgreSQL吧!
  铃木启修
  2018年11月
  PostgreSQL已获得DB-Engines排行榜2017年和2018年的“年度数据库”称号,发展速度迅猛,PostgreSQL被广泛应用的主要原因在于PostgreSQL和Oracle一样,特别适合于非常复杂的企业应用场景,代替Oracle的位置。同时PostgreSQL的开源协议允许用户非常友好地应用在自用业务、对外商用业务中,没有法律风险,也不要求用户开源等。
  很多大型企业应用PostgreSQL也有数年,例如阿里巴巴、邮储、平安、中兴、苏宁、亚信、探探等,长期的PostgreSQL数据库应用使得公司内部的数据库团队在PostgreSQL的管理、开发、内核等各方面的经验、人才都得到了大量的积累。
  文升是我多年的好友,同时也是PostgreSQL核心组成员,为PostgreSQL中文技术社区做出了巨大的贡献。
  2019年,张文升及其技术团队又要出书了,这次带来的是《The Internals of PostgreSQL for database Administrators and System Developers》一书的中文翻译书籍,作者为日本PostgreSQL数据库专家Suzuki,对数据库的集群、架构、SQL处理、外部表接口、并发控制、垃圾回收、HOT、堆表、索引存储结构、WAL日志、时间点恢复、流复制等原理进行了深入浅出的讲解,对期望了解PG内部原理的开发者、管理员、架构师来说,无疑是一本非常好的入门书籍。
  感谢译者对PostgreSQL社区的付出,期待这本图片的出版。
  德哥
  2019年3月