注重体验与质量的电子书资源下载网站
分类于: 编程语言 计算机基础
简介
PostgreSQL指南:内幕探索 豆 0.0分
资源最后更新于 2020-08-23 16:19:23
作者:【日】铃木启修
译者:张文升 冯若航 刘阳明
出版社:电子工业出版社
出版日期:2019-01
ISBN:9787121357091
文件格式: pdf
标签: 数据库 PostgreSQL 计算机 Database 计算机科学 存储 软件开发 软件工程
简介· · · · · ·
《PostgreSQL指南:内幕探索》介绍了PostgreSQL 内部的工作原理,包括数据库对象的逻辑组织与物理实现,进程与内存的架构。并依次剖析了几个重要的子系统:查询处理、外部数据包装器、并发控制、清理过程、缓冲区管理、WAL、备份及流复制。本书为DBA 与系统开发者提供了一幅全景概念地图,有助于读者形成对数据库实现的整体认识,亦可作为深入学习PostgreSQL 源代码的导读手册,对于理解数据库原理与PostgreSQL 内部实现大有裨益。
《PostgreSQL指南:内幕探索》适合数据库开发人员及相关领域的研究人员、数据库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的状态为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
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的状态为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