PostgreSQL 9X之巅(原书第2版)
赞誉
译者简介
中文版序
关于审校者
本书内容概述
你需要为阅读本书准备什么
本书读者
下载示例代码
1 PostgreSQL版本
1.1 PostgreSQL历代版本的性能
1.1.1 选择要部署的版本
1.1.2 升级到一个新的主版本
1.2 选择PostgreSQL还是其他数据库
1.3 PostgreSQL工具
1.3.1 PostgreSQL contrib
1.3.2 pgFoundry
1.3.3 其他PostgreSQL相关软件
1.4 PostgreSQL应用程序的扩展生命周期
1.5 在实践中做性能优化
1.6 小结
2 数据库硬件
2.1 平衡硬件支出
2.1.1 CPU
2.1.2 内存
2.1.3 磁盘
2.1.4 磁盘控制器
2.2 可靠的控制器及磁盘安装
2.2.1 驱动器可靠性研究
2.2.2 回写缓存
2.2.3 直写式缓存的性能影响
2.3 小结
3 数据库硬件的基准评测
3.1 CPU和内存基准评测
3.1.1 Memtest86+
3.1.2 STREAM内存测试
3.1.3 CPU基准评测
3.1.4 内存及处理器速度慢的根源
3.2 物理磁盘的性能
3.2.1 随机存取和IOPS
3.2.2 顺序存取和ZCAV
3.2.3 提交率
3.3 硬盘基准评测工具
3.3.1 使用HD Tune进行硬盘基准评测
3.3.2 磁盘顺序读写吞吐量
3.3.3 Bonnie++
3.3.4 sysbench
3.3.5 寻道速率
3.3.6 复杂磁盘基准评测
3.4 样品磁盘测试结果
磁盘性能预期值
3.5 小结
4 磁盘设置
4.1 文件系统最大值
4.2 文件系统的崩溃恢复
日志文件系统
4.3 Linux文件系统
4.3.1 ext2
4.3.2 ext3
4.3.3 ext4
4.3.4 XFS
4.3.5 其他Linux文件系统
4.3.6 写入屏障
4.3.7 常规Linux文件系统调优
4.4 Solaris与FreeBSD文件系统
4.4.1 Solaris UFS
4.4.2 FreeBSD UFS2
4.4.3 ZFS
4.4.4 FAT32
4.4.5 NTFS
4.5 PostgreSQL的磁盘布局
4.5.1 符号链接
4.5.2 表空间
4.5.3 数据库目录树
4.5.4 磁盘阵列、RAID和磁盘布局
4.6 小结
5 数据库缓存内存
5.1 postgresql.conf中的内存单位
5.2 增加UNIX共享内存参数以增大共享内存块
5.2.1 内核信号量
5.2.2 估算共享内存块的分配
5.2.3 检查数据库缓存
5.2.4 在数据库中安装pg_buffercache模块
5.2.5 数据库磁盘布局
5.2.6 在数据库中创建新块
5.2.7 写脏块到磁盘
5.3 崩溃恢复和缓冲区缓存
5.3.1 检查点处理基础
5.3.2 预写日志和恢复处理
5.3.3 检查点的时间选择
5.3.4 数据库块的生命周期
5.4 数据库缓存与操作系统缓存对比
5.4.1 双重缓存数据
5.4.2 检查点开销
5.4.3 起始大小指导
5.5 分析缓存内容
5.5.1 检查缓冲区缓存查询
5.5.2 使用缓冲区缓存检查来调整反馈
5.6 小结
6 服务器配置调优
6.1 与实时配置交互
6.1.1 默认值和重置值
6.1.2 允许更改的上下文信息
6.1.3 重新加载配置文件
6.1.4 数据库连接
6.1.5 共享内存
6.1.6 日志记录
6.1.7 Vacuuming和统计
6.1.8 检查点
6.1.9 PITR和WAL复制
6.1.10 调整以防患于未然
6.2 小结
7 日常维护
7.1 事务可见性与多版本并发控制
7.1.1 可见性的内部计算
7.1.2 更新
7.1.3 行锁的冲突
7.1.4 删除操作
7.1.5 MVCC的优点
7.1.6 MVCC的缺点
7.1.7 事务ID重叠
7.2 vacuum
7.2.1 vacuum实现
7.2.2 基于开销的vacuum
7.2.3 autovacuum
7.2.4 vacuum和autovacuum的常见问题
7.3 自动分析
7.4 索引膨胀
7.4.1 测定索引膨胀
7.4.2 修复索引膨胀
7.5 转储和恢复
7.6 清空数据库/表
7.7 CLUSTER命令
7.8 重建索引
7.9 详细数据和索引页的监控
7.10 监控查询日志
7.10.1 基本的PostgreSQL日志设置
7.10.2 对棘手的查询进行日志记录
7.10.3 日志文件分析
7.11 小结
8 数据库基准评测
8.1 pgbench默认测试
8.1.1 表的定义
8.4.2 worker线程和pgbench程序的限制
8.1.2 规模检测
8.1.3 查询脚本定义
8.1.4 为pgbench配置数据库服务器
8.2 使用pgbench-tools图形化输出结果
配置pgbench-tools
8.3 pgbench测试结果样例
8.3.1 只读测试
8.3.2 类TPC-B测试(读、写)
8.3.3 延迟分析
8.4 导致不良结果以及变化的缘由
8.4.1 PostgreSQL开发人员模式
8.5 自定义pgbench测试
insert速度测试
8.6 TPC基准评测
8.7 小结
9 数据库索引
9.1 索引例子详解
9.1.1 测量查询的磁盘和索引块统计信息
9.1.2 运行例子
9.1.3 例子数据设置
9.1.4 简单索引查找
9.1.5 全表扫描
9.1.6 索引创建
9.1.7 用低效的索引查找
9.1.8 联合索引
9.1.9 依靠索引聚簇
9.1.10 带有缓冲区计数的EXPLAIN
9.2 索引创建和维护
9.2.1 唯一索引
9.2.2 并发创建索引
9.2.3 对索引聚簇
9.2.4 重建索引
9.3 索引类型
9.3.1 B-tree
9.3.2 哈希
9.3.3 GIN
9.3.4 GiST
9.3.5 SP-GiST
9.3.6 BRIN
9.3.7 仅索引扫描
9.4 count(*)
9.5 可见性映射
9.6 高级索引使用
9.6.1 多列索引
9.6.2 索引用于排序
9.6.3 部分索引
9.6.4 基于表达式的索引
9.6.5 索引用于全文搜索
9.7 小结
10 查询优化
10.1 样例数据集
10.1.1 Pagila
10.1.2 Dell Store 2
10.2 EXPLAIN基础
10.2.1 计时开销
10.2.2 冷热缓存行为
10.3 执行计划节点结构
10.3.1 基本代价计算
10.3.2 可视化解释
10.3.3 详细输出
10.3.4 机器可读的解释输出
10.3.5 规划分析工具
10.4 组装行集合
10.4.1 元组ID
10.4.2 顺序扫描
10.4.3 索引扫描
10.4.4 仅索引扫描
10.4.5 位图堆扫描和索引扫描
10.5 处理节点
10.5.1 排序
10.5.2 Limit
10.5.3 聚集
10.5.4 HashAggregate
10.5.5 唯一
10.5.6 Result
10.5.7 Append
10.5.8 Group
10.5.9 子查询扫描和子计划
10.5.10 集合操作
10.5.11 物化
10.6 CTE扫描
10.7 copy命令
10.7.1 COPY TO
10.7.2 COPY FROM
10.7.3 COPY FREEZE
10.8 连接
10.8.1 嵌套循环
10.8.2 归并连接
10.8.3 哈希连接
10.8.4 连接顺序
10.9 收集统计信息
10.9.1 查看和使用统计信息
10.9.2 统计信息目标
10.9.3 难以估算的部分
10.10 其他查询规划参数
10.10.1 effective_cache_size
10.10.2 work_mem
10.10.3 constraint_exclusion
10.10.4 cursor_tuple_fraction
10.11 执行其他语句类型
10.12 改进查询
10.12.1 优化完全缓存的数据集
10.12.2 查询等价测试
10.12.3 禁用优化器特性
10.12.4 优化器缺陷的解决方案
10.12.5 用OFFSET避免计划重构
10.12.6 外部故障点
10.13 SQL的限制
10.13.1 在SQL中对数据行进行编号
10.13.2 使用窗口函数编号
10.13.3 使用窗口函数进行累计
10.14 小结
11 数据库活动和统计信息
11.1 统计信息视图
11.2 累积视图和实时视图
11.3 表统计信息
表I/O
11.4 索引统计信息
索引I/O
11.5 数据库级别的汇总
11.6 连接与行为
11.7 锁
11.7.1 虚拟事务
11.7.2 解码锁信息
11.7.3 表级锁的模式
11.7.4 事务锁等待
11.7.5 表的锁等待
11.7.6 记录锁信息
11.7.7 保存pg_stat_bgwriter快照
11.7.8 通过后台写入进程的统计信息进行调优
11.8 小结
12 监控和趋势预测
12.1 UNIX监控工具
12.1.1 例子设置
12.1.2 vmstat
12.1.3 iostat
12.1.4 top
12.1.5 SysStat和sar
12.2 Windows监控工具
12.2.1 任务管理器
12.2.2 Windows系统监控器
12.3 趋势分析软件
12.3.1 监控和趋势分析软件类型
12.3.2 Nagios
12.3.3 Cacti
12.3.4 Munin
12.3.5 其他趋势分析软件包
12.4 小结
13 连接池和缓存
13.1 连接池技术
13.1.1 连接池中的连接数
13.1.2 pgpool-II
13.1.3 连接池
13.1.4 复制
13.1.5 看门狗
13.1.6 故障切换
13.1.7 负载均衡
13.1.8 pgBouncer
13.1.9 memcached是什么
13.1.10 pgmemcache
13.2 小结
14 扩展复制
14.1 热备份
14.1.1 专用术语
14.1.2 设置WAL文件传送
14.1.3 流复制
14.1.4 级联复制
14.1.5 同步复制
14.1.6 热备份调优
14.2 复制队列管理器
14.2.1 Slony
14.2.2 Londiste
14.2.3 使用复制队列软件进行读取扩展
14.2.4 特殊的应用程序需求
14.2.5 Bucardo
14.2.6 pglogical
14.2.7 xDB
14.2.8 pgpool-II
14.3 其他有趣的复制相关的项目
14.4 复制方案对比
14.5 小结
15 分区数据
15.1 表继承
15.2 dellstore2数据库
15.3 PostgreSQL中的分区技术
15.4 范围分区
15.5 确定要进行分区的关键字段
15.6 调整分区大小
列表分区
15.7 重定向INSERT语句至分区
15.7.1 动态的触发器函数
15.7.2 分区规则
15.8 空分区的查询规则
15.9 修改日期的UPDATE触发器
15.10 实时迁移分区表
15.11 分区查询
15.12 创建新的分区
15.12.1 定期创建分区
15.12.2 动态创建分区
15.13 分区的优势
15.14 分区中的常见错误
15.15 使用PL/Proxy水平分区
15.15.1 哈希生成
15.15.2 使用PL/Proxy扩展
15.15.3 使用GridSQL扩展
15.16 小结
16 数据库性能分析
16.1 使用gprof进行性能分析
16.2 使用OProfile进行性能分析
16.3 使用Valgrind进行调试
16.4 Visual Studio
16.5 使用DTrace进行性能分析
16.5.1 FreeBSD中的DTrace
16.5.2 Linux中SystemTap的DTrace仿真
16.6 小结
17 避免常见问题
17.1 批量加载
17.1.1 加载方式
17.1.2 批量加载调优
17.1.3 省略预写式日志加速
17.1.4 重建索引和添加约束
17.1.5 并行恢复
17.1.6 加载后清理
17.2 常见性能问题
17.2.1 计算行数
17.2.2 不明写入
17.2.3 慢函数和预处理语句执行
17.2.4 PL/pgSQL基准评测
17.2.5 高外键开销
17.2.6 触发内存使用
17.2.7 过重的统计收集器开销
17.2.8 物化视图
17.3 小结
18 发行版本性能特征
18.1 积极升级PostgreSQL版本
18.2 版本8.1中的性能特征
18.3 版本8.2中的性能特征
18.4 版本8.3中的性能特征
18.5 版本8.4中的性能特征
18.6 版本9.0中的性能特征
18.6.1 复制
18.6.2 查询和EXPLAIN
18.6.3 数据库开发
18.6.4 设置和监控
18.7 版本9.1中的性能特征
18.8 版本9.2中的性能特征
18.9 版本9.3中的性能特征
18.10 版本9.4中的性能特征
18.11 版本9.5中的性能特征
18.12 版本9.6中的性能特征
18.13 小结
思维导图
防止博客图床图片失效,防止图片源站外链:
http://www.processon.com/chart_image/5e5b369ce4b0cb56dab11d3f.png)
思维导图在线编辑链接: