新書推薦:
《
逆风翻盘 危机时代的亿万赢家 在充满危机与风险的世界里,学会与之共舞并找到致富与生存之道
》
售價:NT$
625.0
《
工业互联网导论
》
售價:NT$
445.0
《
孤独传:一种现代情感的历史
》
售價:NT$
390.0
《
家、金钱和孩子
》
售價:NT$
295.0
《
形而上学与测量
》
售價:NT$
340.0
《
世界航母、舰载机图鉴 【日】坂本明
》
售價:NT$
340.0
《
量价关系——透视股票涨跌脉络
》
售價:NT$
340.0
《
创伤与记忆:身体体验疗法如何重塑创伤记忆 [美]彼得·莱文
》
售價:NT$
295.0
|
編輯推薦: |
《PostgreSQL指南:内幕探索》深受PostgreSQL开发者瞩目,全面诠释了 PostgreSQL 数据库系统的整体架构及各个模块!
|
內容簡介: |
本书介绍了 PostgreSQL 内部的工作原理,包括数据库对象的逻辑组织与物理实现,进程与内存的架构。并依次剖析了几个重要的子系统:查询处理、外部数据包装器、并发控制、清理过程、缓冲 区管理、WAL、备份及流复制。本书为 DBA 与系统开发者提供了一幅全景概念地图,有助于读者形 成对数据库实现的整体认识,亦可作为深入学习 PostgreSQL 源代码的导读手册,对于理解数据库原 理与 PostgreSQL 内部实现大有裨益。 本书适合数据库开发人员及相关领域的研究人员、数据库 DBA 及高等院校相关专业的学生阅读。
|
關於作者: |
Hironobu SUZUKI,毕业于北海道大学(Hokkaido University)信息工程学院,曾在多家公司担任软件开发人员和技术经理总监。在数据库和系统集成领域出版了7本书(3本PostgreSQL书籍和3本MySQL书籍)。作为日本PostgreSQL用户组(2010-2016)的主管,组织了日本最大(非商业)的PostgreSQL技术研讨会讲座六年多,并担任日本PostgreSQL的项目委员会主席。
张文升,武汉工业大学毕业,出版《PostgreSQL实战 》,2016-至今探探PostgreSQL DBA2014-2016 去哪儿网高级DBA
|
目錄:
|
第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 共享内存区域18
第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的状态为ABORTED115
5.6.2 t_xmin的状态为IN_PROGRESS115
5.6.3 t_xmin的状态为COMMITTED116
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章WAL182
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_backup215
10.1.2 pg_stop_backup217
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已获得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月
译者序
相信选择这本书的读者,大多已经对PostgreSQL有所了解。本书从PostgreSQL的整体架构展开,依次介绍了各个功能模块的来龙去脉,方便DBA(数据库管理员)与数据库系统开发人员了解数据库内部原理、阅读学习PostgreSQL源码。
数据库是信息系统的核心组件,关系型数据库则是数据库皇冠上的明珠,而PostgreSQL的头衔是世界上最先进的开源关系型数据库。PostgreSQL在各行各业的各种场景下都有着广泛应用。但是会用只是知其然,知道背后的原理才能知其所以然。理解数据库原理及其具体实现,能让架构师以最小复杂度的代价实现所需的功能,让程序员以最小复杂度的代价写出更加高效可靠的代码,让DBA在遇到疑难杂症时拥有精准的直觉与深刻的洞察。
数据库是一个博大精深的领域,存储、IO、计算,无所不包。PostgreSQL可以视作关系型数据库实现的典范,用100万行不到的C代码实现了功能如此丰富的软件系统,非常凝练。它的每一个功能模块都值得用一本甚至几本书的篇幅去介绍。本书虽限于篇幅而无法一一深入所有细节,但它为读者进一步深入理解PostgreSQL提供了一幅全局的概念地图。读者完全可以顺着各个章节的线索,以点破面,深入挖掘源码背后的设计思路。
我们偶然发现了本书的英文版本,读完之后感觉受益匪浅。看到这么好的书没有中文译本,实在是遗憾,遂萌生了翻译的念头。译者不才,愿为PostgreSQL在中国的发展贡献一份力量,但鉴于水平有限,翻译如有疏漏,还望读者海涵。
作者序
中国的PostgreSQL用户们:
你们好!
本书详细解释了PostgreSQL的内部工作细节,目标读者为DBA与系统开发人员。理解数据库内部机制很有挑战,愿本书能在你们精通PostgreSQL的道路上有所助益。
本书能出中文版,我真的感到非常高兴,我这样认为是有原因的。
首先,这是我写的书中第一本被翻译的。当自己的书出版时,心情愉悦自不必说,而自己的作品能被翻译出版,更是一件非常令人激动的事情。
其次,我收到了来自世界各地的电子邮件,请求将这本书翻译成各种语言。实际上,至少有一半的邮件来自中国。许多邮件提及这本书对中国PostgreSQL用户而言很有帮助,因此,我很高兴终于能对他们的要求做出回应。
而最重要的原因与我的家族史有关。先父曾在中国的哈尔滨市住过几年,此后他回到日本,我出生了。他患心脏病很长时间,因此在我的印象中,他的心情总是不好,除了提到一件事时。
当我还是孩子的时候,每晚睡觉前父亲都会给我和妹妹讲他在中国的经历。在讲这些经历时,他总是显得非常高兴,经常说中国人民帮助了他。
他的故事给我留下了深刻的印象,当然也影响了我的人生。因为这些故事,我从小就对这个世界和未知的事物有强烈的好奇心,而我的好奇心也引领我走入软件工程领域。现在,我已经在中国出版了第一本书。简而言之,这是一个关于在日本家庭与中国之间传递爱的故事。
我很高兴终于可以回报中国人民了。当然,这本书只是一份很小的礼物,然而我想充满感激之情地将它献给您。
2017年,我有幸访问中国,亲眼目睹了中国令人惊叹的发展。对我而言,这是一次非常难忘的经历。我希望能再去中国,如果有机会,我还想在中国工作。
无论如何,让我们享受PostgreSQL吧!
铃木启修
2018年11月
|
|