《PostgreSQL 9.0性能调校》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:(美)史密斯著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2013
  • ISBN:9787115307705
  • 页数:386 页
图书介绍:本书是针对PostgreSQL 9.0的性能调校指南。全书共分为16章,分别介绍了PostgreSQL的各个版本、数据库硬件环境和基准评测、磁盘设置、数据库高速缓存、服务器配置、日常维护、数据库索引、查询优化、数据库活动和统计信息、监控与趋势预测、池化与高速缓存、扩展复制、数据分区等性能调校的方方面面,最后总结概括了应该避免的一些常见问题。

第1章 PostgreSQL版本 1

1.1 PostgreSQL历史版本的性能 2

1.1.1选择部署的版本 3

1.1.2升级到更新的主要版本 3

1.2使用PostgreSQL还是其他数据库 5

1.3 PostgreSQL工具 6

1.3.1 PostgreSQL contrib 6

1.3.2 pgFoundry 9

1.3.3其他一些与PostgreSQL相关的软件 9

1.4 PostgreSQL应用程序扩展生命周期 10

1.5作为实践的性能优化 10

1.6小结 12

第2章 数据库硬件 13

2.1平衡硬件支出 13

2.1.1 CPU 13

2.1.2内存 14

2.1.3磁盘 15

2.1.4磁盘控制器 20

2.2可靠的控制器及磁盘安装 24

2.2.1回写缓存 25

2.2.2直写式缓存的性能影响 28

2.3小结 29

第3章 数据库硬件基准评测 30

3.1 CPU和内存基准评测 30

3.1.1 memtest86+ 31

3.1.2 STREAM内存测试 31

3.1.3 CPU基准评测 33

3.1.4内存以及处理器速度慢的缘由 34

3.2物理磁盘的性能 35

3.2.1每秒随机存取以及I/O数量 35

3.2.2顺序存取和区域恒定角速度(ZCAV) 36

3.2.3提交速率 37

3.3磁盘基准评测工具 38

3.3.1 hdtune 38

3.3.2 dd 42

3.3.3 bonnie+++ 43

3.3.4 sysbench 46

3.3.5复杂的磁盘基准评测 48

3.4样品磁盘的测试结果 49

3.5小结 53

第4章 磁盘设置 55

4.1文件系统规模的最大值 55

4.2文件系统的崩溃恢复 56

4.3 Linux文件系统 58

4.3.1 ext2 58

4.3.2 ext3 58

4.3.3 ext4 60

4.3.4 XFS 60

4.3.5其他的Linux文件系统 61

4.3.6写屏障 62

4.3.7常规Linux文件系统调整 64

4.4 Solaris和FreeBSD文件系统 68

4.4.1 Solaris UFS 69

4.4.2 FreeBSDUFS2 70

4.4.3 ZFS 71

4.5 Windows文件系统 72

4.5.1 FAT32 73

4.5.2 NTFS 73

4.6 PostgreSQL的磁盘布局 74

4.6.1符号链接 74

4.6.2表空间 74

4.6.3数据库目录树 75

4.6.4磁盘阵列、RAID以及磁盘布局 76

4.7小结 79

第5章 数据库高速缓存内存 81

5.1 postgresql.conf文件中的内存单元 81

5.2检查数据库高速缓存 86

5.2.1在数据库中安装pg buffercache 86

5.2.2数据库磁盘布局 87

5.2.3在数据库中创建新的块 90

5.2.4将“脏”块写到磁盘 90

5.3故障恢复和缓冲区高速缓存 91

5.3.1检查点处理基础 91

5.3.2预写式日志和恢复处理 91

5.3.3检查点的时机掌握 92

5.3.4数据库块的生命周期 94

5.4数据库缓冲区高速缓存与操作系统高速缓存 95

5.4.1双重缓存数据 95

5.4.2检查点开销 96

5.4.3起始大小指南 96

5.5分析缓冲区高速缓存当中的内容 98

5.5.1缓冲区缓存查询的检查 98

5.5.2使用缓冲区高速缓存检查进行规模的反馈 102

5.6小结 103

第6章 服务器配置调整 104

6.1与当前配置进行交互 104

6.1.1默认值和重置值 105

6.1.2允许更改的上下文信息 105

6.1.3重新加载配置文件 106

6.2服务器范围内的设置 108

6.2.1数据库连接 108

6.2.2共享内存 109

6.2.3日志 110

6.2.4清理与统计信息 112

6.2.5检查点 114

6.2.6 WAL设置 115

6.2.7 PITR和WAL复制 117

6.3每个客户端的设置 117

6.3.1 effective_cache_size 117

6.3.2调整以避免某些情况的出现 120

6.4调整新服务器 121

6.5专用服务器指南 121

6.6共享服务器指南 122

6.7 pgtune 123

6.8小结 123

第7章 日常维护 125

7.1事务可见性以及多版本并发控制 125

7.1.1可见性的内部计算 125

7.1.2 Updates 126

7.1.3行锁的冲突 128

7.1.4删除 130

7.1.5 MVCC的优点 130

7.1.6 MVCC的缺点 131

7.1.7事务ID重叠 131

7.2 Vacuum 132

7.2.1 Vacuum实现 133

7.2.2基于开销的vacuum 135

7.2.3 autovacuum 136

7.2.4常见的一些有关vacuum以及autovacuum的问题 140

7.3 Autoanalyze 144

7.4索引膨胀 144

7.5详细数据和索引页面监控 147

7.6监控查询日志 148

7.6.1基本的PostgreSQL日志设置 148

7.6.2对棘手的查询进行日志记录 152

7.6.3日志文件分析 153

7.7小结 159

第8章 数据库基准评测 161

8.1 pgbench默认测试 161

8.1.1表的定义 161

8.1.2规模检测 162

8.1.3查询脚本定义 163

8.1.4为pgbench测试配置数据库服务器 165

8.2手动运行pgbench测试 166

8.3使用pgbench-tools图形化输出结果 167

8.4 pgbench测试结果样例 168

8.4.1 SELECT测试 168

8.4.2类TPC-B测试 169

8.4.3延迟分析 170

8.5糟糕的结果以及变化的缘由 173

8.6自定义pgbench测试 175

8.7事务处理性能委员会(TPC)基准评测 176

8.8小结 177

第9章 数据库索引 179

9.1索引样例的演练 180

9.1.1查询磁盘以及索引块的统计信息的测量 180

9.1.2样例的运行 181

9.1.3装载样例数据 181

9.1.4简单的索引查找 183

9.1.5全表扫描 184

9.1.6索引的创建 185

9.1.7使用低效的索引进行数据查找 186

9.1.8组合索引 187

9.1.9从索引转换为顺序扫描 188

9.1.10对索引进行聚集 190

9.1.11使用缓冲区计数来解释查询计划 191

9.2索引的创建与维护 192

9.2.1惟一索引 193

9.2.2并发索引的创建 194

9.2.3聚集索引 194

9.2.4重建索引 195

9.3索引的类型 195

9.3.1 B-树 196

9.3.2 Hash 197

9.3.3 GIN 197

9.3.4 GiST 197

9.4高级索引应用 198

9.4.1多列索引 198

9.4.2排序索引 198

9.4.3部分索引 199

9.4.4基于表达式的索引 199

9.4.5全文检索索引 200

9.5小结 200

第10章 查询优化 202

10.1数据集样例 202

10.1.1 Pagila 203

10.1.2 Dell Store2 203

10.2 EXPLAIN基础 205

10.2.1时间开销 205

10.2.2热门以及冷门高速缓存行为 206

10.3查询计划的节点结构 208

10.4 Explain分析工具 211

10.4.1 Visual explain 211

10.4.2 Verbose输出 212

10.4.3机器可读的解释输出 212

10.4.4计划分析工具 213

10.5组合行集 214

10.5.1元组ID 214

10.5.2顺序扫描 215

10.5.3索引扫描 215

10.5.4位图堆与索引扫描 216

10.6处理节点 217

10.6.1 Sort 218

10.6.2 Limit 219

10.6.3 Aggregate 220

10.6.4 HashAggregate 221

10.6.5 Unique 222

10.6.6 Result 223

10.6.7 Append 224

10.6.8 Group 225

10.6.9子查询扫描(Subquery Scan)与子计划(Subplan) 226

10.6.10集操作 227

10.6.11物化 229

10.6.12公共表表达式扫描 229

10.7连接 230

10.7.1循环嵌套 230

10.7.2合并连接(Merge Join) 233

10.7.3 Hash连接 234

10.8统计信息 239

10.8.1查看与估计统计信息 239

10.8.2统计信息指标 243

10.8.3估计一些比较难处理的领域 244

10.9其他一些查询规划参数 245

10.9.1 effective_cache_size 245

10.9.2 work_mem 246

10.9.3 constraint_exclusion 247

10.9.4 cursor_tuple_fraction 247

10.10执行其他的语句类型 247

10.11改进查询 248

10.11.1对完全缓存的数据集进行优化 249

10.11.2查询等价测试 249

10.11.3禁止优化器功能 250

10.11.4绕开优化器问题 254

10.11.5避免计划使用OFFSET进行重组 255

10.11.6外部故障点 258

10.12 SQL限制 258

10.12.1在SQL当中对数据行进行编号 258

10.12.2使用窗口函数进行编号 260

10.12.3使用窗口函数进行累计 260

10.13小结 262

第11章 数据库活动和统计信息 264

11.1统计信息视图 264

11.2渐增视图以及实时视图 266

11.3表统计信息 267

11.4索引统计信息 270

11.5数据库范围内的总计 272

11.6连接及活动 273

11.7锁 274

11.7.1虚拟事务 275

11.7.2解码锁信息 276

11.7.3事务锁等待 279

11.7.4表锁等待 280

11.7.5记录锁定信息 281

11.8磁盘使用 282

11.9缓冲区、后台写入器以及检查点活动 284

11.9.1保存pg_stat_bgwriter快照信息 286

11.9.2使用后台写入器统计信息进行调整 289

11.10小结 290

第12章 监控与趋势预测 292

12.1 UNIX监控工具 292

12.1.1样例安装 292

12.1.2 vmstat 293

12.1.3 iosta 296

12.1.4 top 304

12.1.5 sysstat及sar 306

12.2 Windows监控工具 309

12.2.1任务管理器 309

12.2.2 Windows系统监视器 310

12.3趋势预测软件 312

12.3.1监控以及趋势预测软件的类型 312

12.3.2 Nagios 314

12.3.3 Cacti 315

12.3.4 Munin 316

12.3.5其他的一些趋势预测程序包 316

12.4小结 319

第13章 池化与高速缓存 321

13.1连接池 321

13.1.1连接池计数 322

13.1.2 pgpool-Ⅱ 323

13.1.3 pgBouncer 324

13.2数据库高速缓存 325

13.2.1 memcached 325

13.2.2 pgmemcache 326

13.3小结 327

第14章 扩展复制 329

14.1完全热备(Hot Standby) 329

14.1.1术语 330

14.1.2设置WAL文件传送 331

14.1.3流复制 331

14.1.4完全热备的调整 332

14.2复制队列管理器 333

14.2.1 Slony 334

14.2.2 Londiste 334

14.2.3从扩展复制队列软件当中读取信息 335

14.3特殊的应用程序需求 335

14.3.1 Bucardo 335

14.3.2 pgpool-Ⅱ 336

14.4其他一些有趣的与复制有关的开源项目 336

14.5小结 338

第15章 数据分区 340

15.1表范围分区 340

15.1.1确定要进行分区的关键字段 341

15.1.2调整分区大小 342

15.1.3创建分区 343

15.1.4重定向INSERT语句至分区 344

15.1.5空分区的查询规划 346

15.1.6修改日期的update触发器 347

15.1.7实时迁移分区表 348

15.1.8分区查询 350

15.1.9创建新的分区 353

15.1.10分区的优势 354

15.1.11分区当中的一些常见错误 354

15.2使用PL/Proxy水平分区 355

15.2.1 Hash生成 356

15.2.2使用PL/Proxy扩展 357

15.2.3使用GridSQL扩展 359

15.3小结 360

第16章 应该避免的一些常见问题 362

16.1批量装载 362

16.1.1装载方法 362

16.1.2批量装载的调整 364

16.1.3略过WAL进行加速 365

16.1.4重新创建索引及添加约束信息 365

16.1.5并行恢复 366

16.1.6装载之后的数据整理 366

16.2常见的一些性能问题 367

16.2.1行的计数 367

16.2.2不明写入 368

16.2.3执行缓慢的函数与预处理语句的执行 369

16.2.4 PL/pgSQL基准评测 370

16.2.5高外键开销 370

16.2.6触发器内存使用 371

16.2.7沉重的统计信息收集器开销 372

16.2.8物化视图 373

16.3分析数据库 373

16.3.1 gprof 373

16.3.2 OProfile 373

16.3.3 Visual Studio 374

16.3.4 DTrace 374

16.4不同版本当中的与性能相关的功能 375

16.4.1积极地进行PostgreSQL版本升级 375

16.4.2 8.1 377

16.4.3 8.2 377

16.4.4 8.3 377

16.4.5 8.4 379

16.4.6 9.0 381

16.5小结 385