资深数据库专家、UNIX系统专家、系统架构师近20年一线工作经验结晶,高屋建瓴,指导性强;
《Oracle数据库性能优化的艺术》用系统化分析的方法,从系统工程的角度深入阐述了具有普遍意义的数据库性能评估与优化的思维方法与工作流程。
前言
第1章 综述:优化是一个系统工程
1.1 性能问题是一个系统工程
1.1.1 考虑性能问题的不同阶段
1.1.2 考虑性能问题的不同方面
1.1.3 性能架构中的问题分类
1.2 性能改进的工程方法
1.2.1 不要希望一步到位!
1.2.2 有时也能一步到位?
1.2.3 性能改进工作流程
1.2.4 建立性能分析流程图
1.2.5 编程中应尽量避免的问题
1.2.6 紧急事件性能处理
第2章 设计与优化:物理数据库结构设计
2.1 数据库的特定运行平台
2.2 物理设计与性能的关系
2.3 应用框架与性能特征
2.4 物理表设计的关注点
2.4.1 从逻辑模型到物理模型
2.4.2 物理数据库设计的范围
2.4.3 规范化的设计
2.4.4 反规范化设计
2.4.5 另类反规范化
2.4.6 是否反规范化
2.5 索引的初始设计
2.5.1 索引对象的基本结构
2.5.2 索引的可选择性指标
2.5.3 索引的双面性特征
2.5.4 索引的类型
2.5.5 索引的初始确定
2.5.6 临时表的使用
第3章 部署与优化:准备基本运行环境
3.1 性能问题在表象上的欺骗性
3.2 理解数据库需要的系统资源
3.2.1 IO资源的使用
3.2.2 内存资源的使用
3.2.3 CPU资源的使用
3.2.4 解读内存与CPU状态
3.3 小型机数据库部署准备
3.3.1 AIX的部署准备
3.3.2 HP-UX的部署准备
3.3.3 Solaris的部署准备
3.4 X86系统数据库部署准备
3.4.1 Linux系统的部署准备
3.4.2 Windows系统的部署准备
第4章 部署与优化:数据库的优化部署
4.1 实例初始配置注意点
4.2 数据库空间使用关注
4.3 表空间的创建管理
4.4 创建表时的性能因素
4.5 数据导入与索引维护
第5章 实例优化:配置高效运行环境
5.1 实例配置与缓存优化
5.1.1 启用自动内存管理
5.1.2 主机内存分配原则
5.1.3 使用缓存顾问工具
5.1.4 缓存的命中率问题
5.1.5 缓存命中率分析
5.1.6 精细化缓存的配置
5.2 SQL与缓存的使用
5.2.1 缓存优化
5.2.2 查看数据缓存内容
5.2.3 共享池的效率检查
5.2.4 重做日志缓存问题
5.3 PGA内存分配原则
5.4 Oracle虚拟化关注点
5.4.1 IO问题上的关注点
5.4.2 内存问题上的关注点
5.4.3 CPU问题上的关注点
5.4.4 故障恢复问题的解决
第6章 存储优化:配置高效存储环境
6.1 IO问题的表象与内涵
6.2 存储介质的基础配置
6.2.1 使用逻辑卷技术
6.2.2 设定存储参数
6.3 存储IO能力探究
6.3.1 Orion的安装
6.3.2 Orion的使用
第7章 综合部署:Oracle可靠性设置
7.1 数据库设置的综合考虑
7.1.1 设置数据库的内存使用
7.1.2 数据库的进程使用设置
7.1.3 设置数据库IO模式
7.1.4 设置数据库的归档模式
7.1.5 使用闪回恢复区归档
7.1.6 设置冗余控制文件
7.1.7 保留控制文件信息
7.1.8 设置联机重做日志文件
7.1.9 设置联机重做日志组数
7.1.10 设置数据块校验和检查
7.1.11 打开性能时间统计
7.1.12 表空间和段管理方式
7.1.13 设定多临时表空间和组
7.1.14 使用自动撤销管理
7.1.15 设置空间错误延时
7.1.16 设置数据库闪回
7.2 RAC下的设置
7.2.1 注册远程监听器的实例
7.2.2 设置内部互联网络
7.3 加密表数据
7.4 加密表空间
第8章 对象优化:大表分区方式部署
8.1 分区技术适用的范围
8.2 分区技术的基本概念
8.2.1 分区表的结构
8.2.2 分区部署的收益
8.2.3 分区部署的成本
8.2.4 索引分区
8.3 分区表的管理操作
8.3.1 面向分区的管理
8.3.2 面向分区的操作
8.3.3 面向分区的恢复
8.4 分区的技术实现
8.4.1 基础分区的实现
8.4.2 组合分区的扩展
8.4.3 扩展分区技术
8.4.4 分区表的数据压缩
8.4.5 查看数据存储位置
8.4.6 分区键数据的改变
8.4.7 分区方式选择问题
8.4.8 使用分区顾问工具
第9章 索引定义:索引设置与执行计划
9.1 索引对象
9.2 Oracle优化器
9.2.1 优化器的选择
9.2.2 优化器的设置
9.2.3 数据扫描问题
9.3 索引的技术指标
9.3.1 索引的选择性
9.3.2 索引的簇化率
9.3.3 索引二元高度
9.3.4 直方图的使用
9.4 索引与SQL优化
9.5 避免索引不作为
9.5.1 非等式运算
9.5.2 Null值的比对
9.5.3 函数的调用
9.6 创建虚拟的索引
9.7 创建压缩的索引
9.8 索引的使用监测
9.8.1 创建不可视索引
9.8.2 索引的可用状态
9.8.3 监测索引的使用
9.9 对分区表建立索引
第10章 实例效率:识别数据库内部作为
10.1 研究数据库运行效率
10.1.1 定义和量化性能
10.1.2 统计分析的要素
10.1.3 性能状态的统计
10.1.4 其他相关统计
10.2 操作系统的使用方法
10.2.1 性能监视的手段
10.2.2 使用vmstat
10.2.3 使用iostat
10.2.4 使用sar
10.2.5 使用nmon命令
10.3 调整计划探讨
第11章 优化践行:数据库层面的优化
11.1 Oracle自动统计
11.1.1 统计数据的解释
11.1.2 汇总的统计数据
11.2 使用AWR
11.2.1 在OEM中访问AWR
11.2.2 用API管理AWR快照
11.2.3 使用度量基线
11.2.4 AWR工作报告
11.3 使用ADDM
11.3.1 ADDM内部结构
11.3.2 ADDM使用示例
11.3.3 ADDM环境设置
11.3.4 ADDM手工获得
第12章 优化践行:操作系统层面的优化
12.1 平台的性能相关性
12.2 分配和调度内存资源
12.2.1 使用大的内存页面
12.2.2 设定内存替换阈值
12.2.3 设定内存空闲阈值
12.2.4 对应设置应用内存
12.3 设置系统进程资源
12.4 系统IO资源的使用
12.4.1 优化使用异步IO
12.4.2 优化文件系统挂载
12.4.3 优化应用IO模式
12.5 关闭系统中无用的服务
12.6 监控主机资源使用
12.6.1 服务器性能监控
12.6.2 分析系统的性能
写在最后
——ITpub技术论坛
本书从系统工程和实践艺术的角度,阐释了数据库这一典型技术领域里的各种奥秘、招式和方法论。无论是过去,还是现在,应用系统的核心问题都是性能问题,而性能问题很大程度上又是数据库的性能问题。所以,一直以来,数据的性能库调优都是热门话题,备受关注。本书颠覆了同类书遵从Oracle官方文档(尤其是OCP教材)体系的写法,从性能优化问题现场的角度,从一线工程师怎样解决问题的角度,从用户看待性能瓶颈的角度,从架构设计的角度多视角进行阐述,使到本书极具现场感和实践感。本书是作者多年一线工作实践的精华,也是作者对多年来积累的优化心得的有感而发。个人一直认为,只有那些用心去写的书,投入了作者感情的书才是好书,而本书正是这样的一部作品,值得向广大读者推荐。
近年来,由于存储设备的单位成本以惊人的速度下降(1G硬盘空间的成本现在只需要几美分,这在过去难以想象),使得我们可以用更低的成本存储大量的数据。电信 运营商,可以记录用户通话、短消息、无线上网产生的每一条信令,省级运营商每小时写入存储设备的数据量就可以达到几百G。电子商务网站,可以记录用户的每一 次交易,甚至每一次点击,可以复原用户的完整访问路径,从而找出用户的兴趣点。在生命科学领域,对人体的DNA分析,一个个体就能产生几个G的数据,可以想象如果 一个生物信息数据库里包含了数以亿计的个体数据,信息量将会是怎样一个规模,如此等等,不胜枚举。毫无疑问,我们正处于一个信息爆炸的大数据时代。以 Oracle为代表的关系数据库诞生已经有30多年时间,经过这几十年的积累,很多应用的数据量已经非常可观。作为这些数据的载体、容器,数据库承受着日益 增长的压力。对于存放这些数据的数据库的关注,被提到了一个新的高度,这完全是系统需求使然。而系统需求,即为用户需求,基于性能优化目标的海量数据库设计,不可避免 地变成系统设计中的一个新领域。如何面对海量数据给存储、查询速度、灾备等方面带来的压力,是每位数据库工程师所必须面对的课题。希望本书在此领域可以起到抛砖引玉的作用。
——ITPUB创始人 黄志洪