书籍详情
Oracle性能优化求生指南
作者:(澳)Guy Harrison哈里森 著,郑勇斌,胡怡文,童家旺 译
出版社:人民邮电出版社
出版时间:2012-09-25
ISBN:9787115291141
定价:¥99.00
购买这本书可以去
内容简介
Oracle数据库的应用十分广泛,数据库性能的好坏直接影响应用程序能否快速响应用户指令。而Oracle数据库又比较复杂,数据库性能调优成为众多DBA最为头疼的问题。 《Oracle性能优化求生指南》作者凭借其20多年的丰富经验,为我们带来了一本系统的、全面的Oracle性能优化手册,用结构化方法帮助读者解决从数据库应用到数据库设计的所有问题。全书分为6部分、23章,实例丰富,兼具技术深度和广度,被读者誉为“最有用的Oracle性能调优参考书”。主要内容包括: 有效的Oracle性能优化方法描述; 如何充分利用Oracle的核心工具来跟踪、监控、诊断性能; 高效的数据库逻辑与物理设计、索引设计、事务设计以及API的使用; SQL与PL/SQL调优,包含并行SQL技术的使用; 最小化排队锁、闩锁、共享内存以及其他数据库资源的争用; 优化内存以及物理磁盘I/O; 调优Oracle RAC。 《Oracle性能优化求生指南》适用于所有的Oracle DBA。
作者简介
Guy Harrison,知名Oracle技术专家,在应用与数据库管理、性能调优、软件开发领域有20多年的从业经验。目前任Quest软件公司研发总监,带领软件开发团队研发了广受欢迎的Spotlight系列产品,他负责Spotlight的Oracle版本、Oracle RAC版本、MySQL版本及SQL Server版本。除本书外,他还著有Oracle SQL High Performance Tuning、Oracle Desk Reference及MySQL Stored Procedure Programming。 译 者 简 介: 郑勇斌,Oracle DBA和数据架构师,IT从业超过10年,曾经从事过政府和企业门户、业务系统、网站系统的开发和架构工作,2006年转型成为Oracle DBA,专职Oracle管理和性能优化。曾供职北大青鸟及阿里巴巴,目前就职于盛大文学,负责云中书城的数据库管理和系统运维。主持和参与过许多大型项目的开发,负责应用架构和系统设计。目前主要从事Oracle、MySQL、Hadoop以及NoSQL等相关产品的研究和应用。翻译这本书时,还得追溯到在阿里巴巴与童家旺一起共事的日子,那是一段美好的日子,怀念和DBA Team兄弟共处的日子。 胡怡文,江苏淮安涟水人。2008年加入支付宝(中国)网络技术有限公司,有幸见证了这几年传统DB和分布式技术在这家快速发展的公司中的应用历程,并为之和兄弟们一起并肩战斗。曾任数据仓库运维团队Leader,经历过Oracle->Greenplum->Hadoop的变迁。现专职于DB方面的工作。没有最好的技术,只有最合适的技术。有志于对软硬件相结合的DB技术和应用架构进行更深入的研究,并和大家一起分享探讨。 童家旺,10年的Oracle数据库从业经验,对Oracle的体系结构、性能调优及故障诊断有一定的理解,参与了比较多的大型互联网应用的设计,致力于设计高可靠、可扩展、高性能的数据库应用。对各种后端架构(数据库、存储、CDN)都有兴趣。曾经参与翻译了《Oracle性能诊断艺术》(2009年11月,人民邮电出版社出版)一书。经常在微博(jametong)以及个人Blog上发表一些个人观点以及学习心得。
目录
第一部分 方法、概念和工具
第1章 Oracle性能调优:一种系统化方法
1.1 Oracle性能调优简史
1.2 超越表面分析法
1.3 第一阶段:最小化应用负载
1.4 第二阶段:降低争用和瓶颈
1.5 第三阶段:降低物理IO
1.6 第四阶段:优化磁盘IO
1.7 本章小结
第2章 Oracle体系结构与基本概念
2.1 Oracle API
2.1.1 创建游标
2.1.2 检查缓存的SQL语句
2.1.3 解析SQL语句
2.1.4 关联绑定变量
2.1.5 执行SQL语句
2.1.6 提取记录
2.1.7 使用批量提取
2.1.8 处理结果集
2.1.9 关闭游标
2.1.10 优化Oracle API调用
2.2 Oracle查询优化器
2.2.1 基于成本的优化
2.2.2 优化器目标
2.2.3 优化器统计信息
2.2.4 绑定变量窥视与自适应游标共享
2.2.5 提示
2.2.6 存储概要、SQL概要和SQL计划基线
2.3 事务和锁
2.4 Oracle服务器体系结构
2.4.1 实例与数据库
2.4.2 系统全局区
2.4.3 数据缓存
2.4.4 程序全局区
2.4.5 内存管理
2.5 段与文件
2.5.1 表
2.5.2 索引
2.5.3 块、区间、段以及分区
2.5.4 表空间与数据文件
2.5.5 回滚段
2.5.6 重做日志与归档日志
2.5.7 闪回日志
2.6 服务器进程
2.7 后台进程
2.8 真正应用集群
2.9 本章小结
第3章 实用工具
3.1 生成SQL语句的执行计划
3.1.1 计划表
3.1.2 研究缓存的SQL
3.1.3 DBMS_XPLAN
3.1.4 解释执行计划
3.1.5 虚拟索引
3.2 跟踪Oracle的执行
3.2.1 从当前会话中调用跟踪
3.2.2 识别跟踪文件
3.2.3 获取跟踪状态
3.2.4 在其他会话中调用跟踪
3.2.5 通过MODULE、ACTION或SERVICE进行跟踪
3.2.6 使用登录触发器来启用跟踪
3.2.7 定位跟踪文件
3.2.8 其他特殊化的跟踪
3.3 使用tkprof格式化跟踪文件
3.3.1 tkprof的排序选项
3.3.2 其他tkprof选项
3.3.3 合并多个SQL跟踪文件
3.3.4 解释tkprof的输出结果
3.3.5 tkprof中的执行计划
3.3.6 等待统计信息与tkprof
3.3.7 tkprof的替代品
3.4 在SQL*PLUS中使用AUTOTRACE
3.5 监控Oracle服务器
3.5.1 V$表接口
3.5.2 等待接口
3.5.3 时间模型
3.5.4 整合时间模型与等待接口
3.5.5 Oracle企业管理器
3.5.6 SPOTLIGHT ON ORACLE
3.6 本章小结
第二部分 应用和数据库设计
第4章 数据库逻辑设计和物理设计
4.1 逻辑数据模型
4.1.1 标准化和第三范式
4.1.2 数据类型选择
4.1.3 人造键
4.1.4 数据仓库设计
4.2 逻辑模型到物理模型的映射
4.2.1 将实体或类映射成表
4.2.2 选择表的类型
4.2.3 数据类型和精度
4.2.4 可选的属性和NULL值
4.2.5 列的顺序
4.2.6 探索Oracle对象模型
4.3 反规范化
4.3.1 复制列值以避免表联结
4.3.2 概要表
4.3.3 垂直分区
4.3.4 实施反规范化
4.4 星型模式设计
4.4.1 星型模式基础
4.4.2 雪花模式
4.4.3 维度层次结构
4.4.4 聚集和物化视图
4.4.5 物化视图最佳实践
4.5 物理存储方案
4.5.1 数据段存储手工管理和自动管理
4.5.2 并行插入和空闲块链表
4.5.3 PCTFREE 与PCTUSED
4.5.4 压缩
4.5.5 大数据字段LOB的存储
4.6 分区
4.6.1 分区的类型
4.6.2 组合分区
4.6.3 选择一个分区策略
4.6.4 企业管理器的分区顾问
4.7 本章小结
第5章 索引与簇
5.1 Oracle索引与簇机制的概况
5.2 B*树索引
5.2.1 索引选择性
5.2.2 唯一索引
5.2.3 隐含索引
5.2.4 组合索引
5.2.5 索引跳跃扫描
5.2.6 创建组合索引的指导原则
5.2.7 索引合并
5.2.8 索引中的空值
5.2.9 反转键(Reverse Key)索引
5.2.10 索引压缩
5.2.11 函数索引
5.2.12 外键与锁
5.2.13 索引与分区
5.3 位图索引
5.3.1 位图索引的特性
5.3.2 位图索引的缺陷
5.3.3 位图索引与基数
5.3.4 位图索引合并
5.3.5 位图联结索引
5.4 索引的开销
5.5 索引组织表
5.5.1 配置溢出段
5.5.2 定期重建索引组织表(IOT)
5.6 簇
5.6.1 索引簇
5.6.2 散列簇
5.7 嵌套表
5.8 选择最优的索引策略
5.9 本章小结
第6章 应用设计与实现
6.1 SQL语句管理
6.1.1 优化解析
6.1.2 避免执行不必要的SQL语句
6.2 批量接口
6.2.1 实现批量提取
6.2.2 批量插入
6.3 事务设计
6.3.1 隔离级别
6.3.2 事务与锁
6.3.3 Oracle中的行级锁
6.3.4 应用的锁策略
6.4 使用存储过程来降低网络流量
6.5 本章小结
第三部分 SQL和PL/SQL调优
第7章 优化器的优化
7.1 Oracle优化器
7.1.1 什么是成本
7.1.2 优化器目标
7.1.3 选择性和基数
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.2 使用DBMS_STAT
7.2.1 DBMS_STATS的储存过程和参数
7.2.2 设置DBMS_STATS的系统默认值
7.2.3 使用METHOD_OPT创建直方图
7.2.4 抽样
7.2.5 分区统计信息
7.2.6 扩展的统计信息
7.2.7 锁定统计信息
7.2.8 系统统计信息
7.2.9 导出和导入统计信息
7.2.10 操纵统计信息
7.3 本章小结
第8章 执行计划管理
8.1 提示
8.1.1 使用提示来改变访问路径
8.1.2 使用提示来改变联结顺序
8.1.3 提示详述中的错误
8.2 存储提纲
8.2.1 创建存储提纲以稳定执行计划
8.2.2 侵入存储提纲
8.3 SQL调优集
8.3.1 手动创建调优集
8.3.2 在企业管理器中创建调优集
8.4 SQL概要和SQL调优顾问
8.4.1 使用DBMS_SQLTUNE
8.4.2 索引建议
8.4.3 企业管理器中的SQL优化
8.4.4 使用SQL访问顾问进行交叉SQL调优
8.5 SQL基线
8.5.1 创建基线
8.5.2 进化基线
8.5.3 自动化和配置基线
8.5.4 固化的基线
8.5.5 在ORACLE 企业管理器中管理基线
8.6 本章小结
第9章 表访问调优
9.1 单值查询
9.1.1 在表和索引扫描间选择
9.1.2 位图索引和单值查询
9.1.3 散列聚簇和单值查询
9.2 避免“意外的”表扫描
9.2.1 不等条件
9.2.2 空值查询
9.2.3 查找非空值
9.2.4 在可为空的列上创建索引
9.2.5 无意中通过使用函数而禁用了索引
9.2.6 函数索引
9.2.7 函数索引和统计
9.2.8 虚拟列
9.3 多列查询
9.3.1 使用组合索引
9.3.2 索引合并
9.3.3 唯一性与覆盖索引
9.4 查找范围
9.4.1 无界范围扫描
9.4.2 有界范围扫描
9.4.3 范围查询
9.5 使用LIKE运算符
9.6 多值单列查找
9.7 优化必要的全表扫描
9.7.1 降低高水位线
9.7.2 优化PCTFREE和PCTUSED
9.7.3 减少记录长度
9.7.4 压缩表
9.7.5 使数据库IO更高效
9.7.6 使用抽样选项
9.7.7 并行查询
9.7.8 快速全索引扫描
9.7.9 分区
9.8 本章小结
第10章 联结与子查询
10.1 联结类型
10.2 联结方法
10.2.1 嵌套循环联结
10.2.2 排序合并联结
10.2.3 散列联结
10.3 选择正确的联结方法
10.3.1 排序合并/散列与嵌套循环的对比
10.3.2 排序合并和散列联结对比
10.4 优化联结
10.4.1 优化嵌套循环联结
10.4.2 优化排序合并联结与散列联结
10.5 避免联结
10.5.1 反范式化
10.5.2 索引聚簇
10.5.3 物化视图
10.5.4 位图联结索引
10.6 联结顺序
10.7 特殊联结
10.7.1 外联结
10.7.2 星型联结
10.7.3 层级查询
10.8 子查询
10.8.1 简单子查询
10.8.2 关联子查询
10.8.3 反联结子查询
10.8.4 半联结子查询
10.9 本章小结
第11章 排序、分组与集合操作
11.1 排序操作
11.1.1 最优、一次和多次排序
11.1.2 衡量排序活动
11.1.3 跟踪排序活动
11.1.4 使用索引规避排序
11.2 分组与聚合
11.2.1 聚合操作
11.2.2 最大值和最小值
11.2.3 “前N”查询
11.2.4 计算一张表的记录数
11.2.5 分组操作
11.2.6 HAVING与WHERE
11.3 集合操作
11.3.1 UNION与UNION ALL
11.3.2 INTERSECT
11.3.3 MINUS
11.3.4 集合操作和它们的替代方法
11.4 本章小结
第12章 使用和调优PL/SQL
12.1 PL/SQL的性能优势
12.1.1 过程化的方法
12.1.2 减少网络开销
12.1.3 分解并攻克海量的SQL语句
12.2 衡量PL/SQL的性能
12.2.1 衡量PL/SQL的开销
12.2.2 使用DBMS_PROFILER
12.2.3 11g的分层剖析器
12.3 数据访问优化
12.3.1 数组处理和BULK COLLECT
12.3.2 对INSERT语句进行数组处理
12.3.3 绑定变量和动态SQL
12.4 PL/SQL代码优化
12.4.1 首先调优SQL
12.4.2 PLSQL_OPTIMIZE_LEVEL
12.4.3 循环优化
12.4.4 “短路”表达式
12.4.5 在IF和CASE语句中表达式的顺序
12.4.6 递归
12.4.7 NOCOPY子句
12.4.8 关联数组
12.5 其他优化
12.5.1 本地编译
12.5.2 内联PL/SQL
12.5.3 数据类型
12.5.4 使用JAVA计算
12.5.5 函数缓存
12.6 DML触发器的性能
12.6.1 UPDATE OF和WHEN子句
12.6.2 BEFORE和AFTER ROW触发器
12.7 本章小结
第13章 并行SQL
13.1 理解并行SQL
13.1.1 并行进程和并行度
13.1.2 并行子进程池
13.1.3 并行查询IO
13.1.4 并行性能收益
13.2 决定何时使用并行处理
13.2.1 服务器计算机有多个CPU
13.2.2 被访问的数据放置在多个磁盘驱动器上
13.2.3 使用并行的SQL是长时间运行的或者资源敏感的
13.2.4 SQL执行最少一次全表、索引或分区扫描
13.2.5 主机有空闲的能力
13.2.6 SQL是调优过的
13.3 配置并行处理
13.3.1 确定并行度
13.3.2 并行提示
13.3.3 并行配置的参数
13.4 监控并行SQL
13.4.1 并行语句的执行计划
13.4.2 跟踪并行执行
13.4.3 V$PQ_TQSTAT视图
13.4.4 其他的统计数据
13.5 优化并行的性能
13.5.1 从一个优化过的串行执行的SQL开始
13.5.2 确保这个SQL适合并行执行
13.5.3 确保系统适合配置支持并行执行
13.5.4 确保执行计划的所有部分都做了并行化
13.5.5 确保请求的并行度是可实现的
13.5.6 监控实际的并行度
13.5.7 检查进程间数据和负载的偏差
13.6 其他的并行主题
13.6.1 RAC的并行执行
13.6.2 并行的索引查找
13.6.3 并行DML
13.6.4 并行DDL
13.7 本章小结
第14章 DML调优
14.1 DML性能基础
14.1.1 Where子句优化
14.1.2 索引开销
14.1.3 触发器开销
14.1.4 参照完整性
14.2 INSERT操作的特定优化
14.2.1 批量处理
14.2.2 直接路径插入
14.2.3 多表插入
14.2.4 手动段存储管理(MSSM)和空闲列表
14.2.5 并行DML
14.3 删除操作
14.3.1 TRUNCATE
14.3.2 分区
14.3.3 CREATE TABLE AS SELECT
14.4 更新和合并操作
14.4.1 关联更新
14.4.2 优化MERGE操作
14.5 COMMIT优化
14.5.1 COMMIT频率
14.5.2 批量和NOWAIT提交
14.5.3 NOLOGGING
14.6 本章小结
第四部分 最小化争用
第15章 锁争用
15.1 锁的类型和模式
15.2 等待锁
15.3 监控和分析锁
15.3.1 锁等待的统计数据
15.3.2 发现导致锁争用的SQL
15.3.3 度量指定事务的锁争用
15.3.4 跟踪锁行为
15.3.5 阻塞者和等待者
15.4 应用程序的锁策略
15.5 行级锁什么时候会失败
15.5.1 没有索引的外键
15.5.2 事务表等待
15.5.3 位图索引
15.5.4 直接路径插入
15.6 系统锁
15.6.1 高水位标记enqueue
15.6.2 空间事务enqueue
15.6.3 序列缓存enqueue
15.6.4 用户锁enqueue
15.6.5 其他的系统锁
15.7 本章小结
第16章 闩锁和互斥争用
16.1 闩锁和互斥架构的简介
16.1.1 GETS、SPINS和SLEEPS
16.1.2 互斥
16.2 度量和诊断闩锁/互斥争用
16.2.1 识别单个的闩锁
16.2.2 发现与闩锁等待相关的SQL和段
16.3 特定的闩锁和互斥场景
16.3.1 Library Cache Mutex等待
16.3.2 Library Cache Pin
16.3.3 Shared Pool Latch
16.3.4 Cache Buffers Chains Latch
16.3.5 Row Cache Object闩锁
16.3.6 其他的闩锁场景
16.4 闩锁争用是不可避免的吗
16.4.1 改变_SPIN_COUNT怎么样
16.4.2 自旋计数、闩锁争用和吞吐量
16.4.3 设置单个闩锁的自旋计数
16.5 本章小结
第17章 共享内存争用
17.1 缓冲区高速缓存架构
17.2 空闲缓冲块等待
17.2.1 DBWR直接和异步IO
17.2.2 空闲缓冲块等待的其他补救措施
17.3 恢复写进程等待
17.3.1 提高闪回日志IO
17.3.2 增加闪回日志缓冲的大小
17.4 缓冲忙等待
17.4.1 度量缓冲忙
17.4.2 缓冲忙等待的传统原因
17.4.3 缓冲忙和热块
17.5 重做日志缓冲等待
17.6 本章小结
第五部分 优化内存
第18章 缓冲区高速缓存调优
18.1 缓冲区高速缓存的原理
18.1.1 最近最少使用列表
18.1.2 表扫描处理
18.1.3 CACHE属性
18.1.4 直接路径IO
18.2 缓冲区高速缓存配置和调优
18.2.1 监控缓冲区高速缓存
18.2.2 缓冲区高速缓存命中率
18.2.3 多个缓冲区高速缓存
18.2.4 设置缓冲区高速缓存的大小
18.3 自动共享内存管理
18.3.1 实现ASMM
18.3.2 监控重设大小操作
18.3.3 调优ASMM
18.3.4 非默认池
18.3.5 内存抖动
18.4 本章小结
第19章 优化PGA内存
19.1 IO和PGA内存
19.2 PGA内存管理
19.2.1 PGA_AGGREGATE_TARGET
19.2.2 会话的PGA限制
19.3 测量PGA的使用和效率
19.3.1 会话的PGA利用率
19.3.2 测量临时IO等待时间
19.3.3 测量工作区活动
19.4 用V$PGA_TARGET_ADVICE来设置PGA的大小
19.5 覆写PGA总量目标
19.6 本章小结
第20章 其他的内存管理主题
20.1 优化整体的Oracle内存
20.1.1 IO等待时间和内存优化
20.1.2 使用顾问来分配PGA和缓冲区高速缓存的内存
20.1.3 Oracle 11g的自动化内存管理
20.2 结果集缓存
20.2.1 启用和配置结果集缓存
20.2.2 结果集缓存的统计数据
20.2.3 结果集缓存的依赖
20.2.4 结果集缓存闩锁
20.3 其他的内存优化
20.3.1 设置共享池的大小
20.3.2 设置大池的大小
20.3.3 重做日志缓存
20.3.4 锁定SGA
20.4 本章小结
第六部分 IO调优和集群
第21章 磁盘IO调优基础
21.1 磁盘IO的概念
21.1.1 服务时间和吞吐量
21.1.2 排队
21.1.3 磁盘驱动器:慢和正在变得更慢
21.1.4 磁盘容量和数据分布
21.2 Oracle IO架构
21.2.1 数据文件单块读
21.2.2 多块读
21.2.3 直接路径读
21.2.4 临时直接路径IO
21.2.5 数据文件写IO
21.2.6 直接路径写
21.2.7 重做日志IO
21.2.8 归档日志IO
21.2.9 闪回IO
21.2.10 控制文件IO
21.3 度量和监控Oracle IO
21.3.1 IO等待次数
21.3.2 监控数据文件IO
21.3.3 IO基准测试
21.4 优化数据文件IO
21.4.1 最小化IO延时
21.4.2 最大化IO吞吐量
21.4.3 条带化策略
21.4.4 RAID阵列
21.4.5 隔离数据文件IO
21.5 重做和归档优化
21.5.1 交替和分发日志
21.5.2 重做和归档设备的细粒度条带化
21.5.3 对重做日志使用RAID5大声说不
21.5.4 重做日志大小
21.6 闪回日志
21.7 本章小结
第22章 高级IO技术
22.1 自动存储管理
22.1.1 ASM架构
22.1.2 ASM监控
22.1.3 ASM调优
22.2 固态磁盘(SSD)
22.2.1 基于闪存的SSD
22.2.2 基于随机存储器的DDR
SSD
22.2.3 混合的SSD
22.2.4 为Oracle数据库使用SSD
22.3 EXADATA存储服务器
22.4 数据库块大小
22.5 本章小结
第23章 优化RAC
23.1 RAC概览
23.1.1 全局缓存请求
23.1.2 RAC调优原则
23.1.3 单实例调优和RAC
23.2 度量集群开销
23.3 减少全局缓存延时
23.3.1 度量全局缓存延时
23.3.2 检查内部互连
23.3.3 内部互连问题的信号
23.4 优化内部互连
23.4.1 网络硬件和协议
23.4.2 以太网特大帧
23.4.3 UDP缓冲大小
23.4.4 LMS等待
23.5 集群负载均衡
23.5.1 评估集群负载均衡
23.5.2 集群负载均衡和服务
23.5.3 RAC负载均衡服务
23.6 最小化全局缓存请求
23.6.1 高的全局缓存请求比例的原因
23.6.2 度量全局缓存请求比例
23.6.3 减少全局缓存请求的技巧
23.7 本章小结
参考书目
第1章 Oracle性能调优:一种系统化方法
1.1 Oracle性能调优简史
1.2 超越表面分析法
1.3 第一阶段:最小化应用负载
1.4 第二阶段:降低争用和瓶颈
1.5 第三阶段:降低物理IO
1.6 第四阶段:优化磁盘IO
1.7 本章小结
第2章 Oracle体系结构与基本概念
2.1 Oracle API
2.1.1 创建游标
2.1.2 检查缓存的SQL语句
2.1.3 解析SQL语句
2.1.4 关联绑定变量
2.1.5 执行SQL语句
2.1.6 提取记录
2.1.7 使用批量提取
2.1.8 处理结果集
2.1.9 关闭游标
2.1.10 优化Oracle API调用
2.2 Oracle查询优化器
2.2.1 基于成本的优化
2.2.2 优化器目标
2.2.3 优化器统计信息
2.2.4 绑定变量窥视与自适应游标共享
2.2.5 提示
2.2.6 存储概要、SQL概要和SQL计划基线
2.3 事务和锁
2.4 Oracle服务器体系结构
2.4.1 实例与数据库
2.4.2 系统全局区
2.4.3 数据缓存
2.4.4 程序全局区
2.4.5 内存管理
2.5 段与文件
2.5.1 表
2.5.2 索引
2.5.3 块、区间、段以及分区
2.5.4 表空间与数据文件
2.5.5 回滚段
2.5.6 重做日志与归档日志
2.5.7 闪回日志
2.6 服务器进程
2.7 后台进程
2.8 真正应用集群
2.9 本章小结
第3章 实用工具
3.1 生成SQL语句的执行计划
3.1.1 计划表
3.1.2 研究缓存的SQL
3.1.3 DBMS_XPLAN
3.1.4 解释执行计划
3.1.5 虚拟索引
3.2 跟踪Oracle的执行
3.2.1 从当前会话中调用跟踪
3.2.2 识别跟踪文件
3.2.3 获取跟踪状态
3.2.4 在其他会话中调用跟踪
3.2.5 通过MODULE、ACTION或SERVICE进行跟踪
3.2.6 使用登录触发器来启用跟踪
3.2.7 定位跟踪文件
3.2.8 其他特殊化的跟踪
3.3 使用tkprof格式化跟踪文件
3.3.1 tkprof的排序选项
3.3.2 其他tkprof选项
3.3.3 合并多个SQL跟踪文件
3.3.4 解释tkprof的输出结果
3.3.5 tkprof中的执行计划
3.3.6 等待统计信息与tkprof
3.3.7 tkprof的替代品
3.4 在SQL*PLUS中使用AUTOTRACE
3.5 监控Oracle服务器
3.5.1 V$表接口
3.5.2 等待接口
3.5.3 时间模型
3.5.4 整合时间模型与等待接口
3.5.5 Oracle企业管理器
3.5.6 SPOTLIGHT ON ORACLE
3.6 本章小结
第二部分 应用和数据库设计
第4章 数据库逻辑设计和物理设计
4.1 逻辑数据模型
4.1.1 标准化和第三范式
4.1.2 数据类型选择
4.1.3 人造键
4.1.4 数据仓库设计
4.2 逻辑模型到物理模型的映射
4.2.1 将实体或类映射成表
4.2.2 选择表的类型
4.2.3 数据类型和精度
4.2.4 可选的属性和NULL值
4.2.5 列的顺序
4.2.6 探索Oracle对象模型
4.3 反规范化
4.3.1 复制列值以避免表联结
4.3.2 概要表
4.3.3 垂直分区
4.3.4 实施反规范化
4.4 星型模式设计
4.4.1 星型模式基础
4.4.2 雪花模式
4.4.3 维度层次结构
4.4.4 聚集和物化视图
4.4.5 物化视图最佳实践
4.5 物理存储方案
4.5.1 数据段存储手工管理和自动管理
4.5.2 并行插入和空闲块链表
4.5.3 PCTFREE 与PCTUSED
4.5.4 压缩
4.5.5 大数据字段LOB的存储
4.6 分区
4.6.1 分区的类型
4.6.2 组合分区
4.6.3 选择一个分区策略
4.6.4 企业管理器的分区顾问
4.7 本章小结
第5章 索引与簇
5.1 Oracle索引与簇机制的概况
5.2 B*树索引
5.2.1 索引选择性
5.2.2 唯一索引
5.2.3 隐含索引
5.2.4 组合索引
5.2.5 索引跳跃扫描
5.2.6 创建组合索引的指导原则
5.2.7 索引合并
5.2.8 索引中的空值
5.2.9 反转键(Reverse Key)索引
5.2.10 索引压缩
5.2.11 函数索引
5.2.12 外键与锁
5.2.13 索引与分区
5.3 位图索引
5.3.1 位图索引的特性
5.3.2 位图索引的缺陷
5.3.3 位图索引与基数
5.3.4 位图索引合并
5.3.5 位图联结索引
5.4 索引的开销
5.5 索引组织表
5.5.1 配置溢出段
5.5.2 定期重建索引组织表(IOT)
5.6 簇
5.6.1 索引簇
5.6.2 散列簇
5.7 嵌套表
5.8 选择最优的索引策略
5.9 本章小结
第6章 应用设计与实现
6.1 SQL语句管理
6.1.1 优化解析
6.1.2 避免执行不必要的SQL语句
6.2 批量接口
6.2.1 实现批量提取
6.2.2 批量插入
6.3 事务设计
6.3.1 隔离级别
6.3.2 事务与锁
6.3.3 Oracle中的行级锁
6.3.4 应用的锁策略
6.4 使用存储过程来降低网络流量
6.5 本章小结
第三部分 SQL和PL/SQL调优
第7章 优化器的优化
7.1 Oracle优化器
7.1.1 什么是成本
7.1.2 优化器目标
7.1.3 选择性和基数
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.2 使用DBMS_STAT
7.2.1 DBMS_STATS的储存过程和参数
7.2.2 设置DBMS_STATS的系统默认值
7.2.3 使用METHOD_OPT创建直方图
7.2.4 抽样
7.2.5 分区统计信息
7.2.6 扩展的统计信息
7.2.7 锁定统计信息
7.2.8 系统统计信息
7.2.9 导出和导入统计信息
7.2.10 操纵统计信息
7.3 本章小结
第8章 执行计划管理
8.1 提示
8.1.1 使用提示来改变访问路径
8.1.2 使用提示来改变联结顺序
8.1.3 提示详述中的错误
8.2 存储提纲
8.2.1 创建存储提纲以稳定执行计划
8.2.2 侵入存储提纲
8.3 SQL调优集
8.3.1 手动创建调优集
8.3.2 在企业管理器中创建调优集
8.4 SQL概要和SQL调优顾问
8.4.1 使用DBMS_SQLTUNE
8.4.2 索引建议
8.4.3 企业管理器中的SQL优化
8.4.4 使用SQL访问顾问进行交叉SQL调优
8.5 SQL基线
8.5.1 创建基线
8.5.2 进化基线
8.5.3 自动化和配置基线
8.5.4 固化的基线
8.5.5 在ORACLE 企业管理器中管理基线
8.6 本章小结
第9章 表访问调优
9.1 单值查询
9.1.1 在表和索引扫描间选择
9.1.2 位图索引和单值查询
9.1.3 散列聚簇和单值查询
9.2 避免“意外的”表扫描
9.2.1 不等条件
9.2.2 空值查询
9.2.3 查找非空值
9.2.4 在可为空的列上创建索引
9.2.5 无意中通过使用函数而禁用了索引
9.2.6 函数索引
9.2.7 函数索引和统计
9.2.8 虚拟列
9.3 多列查询
9.3.1 使用组合索引
9.3.2 索引合并
9.3.3 唯一性与覆盖索引
9.4 查找范围
9.4.1 无界范围扫描
9.4.2 有界范围扫描
9.4.3 范围查询
9.5 使用LIKE运算符
9.6 多值单列查找
9.7 优化必要的全表扫描
9.7.1 降低高水位线
9.7.2 优化PCTFREE和PCTUSED
9.7.3 减少记录长度
9.7.4 压缩表
9.7.5 使数据库IO更高效
9.7.6 使用抽样选项
9.7.7 并行查询
9.7.8 快速全索引扫描
9.7.9 分区
9.8 本章小结
第10章 联结与子查询
10.1 联结类型
10.2 联结方法
10.2.1 嵌套循环联结
10.2.2 排序合并联结
10.2.3 散列联结
10.3 选择正确的联结方法
10.3.1 排序合并/散列与嵌套循环的对比
10.3.2 排序合并和散列联结对比
10.4 优化联结
10.4.1 优化嵌套循环联结
10.4.2 优化排序合并联结与散列联结
10.5 避免联结
10.5.1 反范式化
10.5.2 索引聚簇
10.5.3 物化视图
10.5.4 位图联结索引
10.6 联结顺序
10.7 特殊联结
10.7.1 外联结
10.7.2 星型联结
10.7.3 层级查询
10.8 子查询
10.8.1 简单子查询
10.8.2 关联子查询
10.8.3 反联结子查询
10.8.4 半联结子查询
10.9 本章小结
第11章 排序、分组与集合操作
11.1 排序操作
11.1.1 最优、一次和多次排序
11.1.2 衡量排序活动
11.1.3 跟踪排序活动
11.1.4 使用索引规避排序
11.2 分组与聚合
11.2.1 聚合操作
11.2.2 最大值和最小值
11.2.3 “前N”查询
11.2.4 计算一张表的记录数
11.2.5 分组操作
11.2.6 HAVING与WHERE
11.3 集合操作
11.3.1 UNION与UNION ALL
11.3.2 INTERSECT
11.3.3 MINUS
11.3.4 集合操作和它们的替代方法
11.4 本章小结
第12章 使用和调优PL/SQL
12.1 PL/SQL的性能优势
12.1.1 过程化的方法
12.1.2 减少网络开销
12.1.3 分解并攻克海量的SQL语句
12.2 衡量PL/SQL的性能
12.2.1 衡量PL/SQL的开销
12.2.2 使用DBMS_PROFILER
12.2.3 11g的分层剖析器
12.3 数据访问优化
12.3.1 数组处理和BULK COLLECT
12.3.2 对INSERT语句进行数组处理
12.3.3 绑定变量和动态SQL
12.4 PL/SQL代码优化
12.4.1 首先调优SQL
12.4.2 PLSQL_OPTIMIZE_LEVEL
12.4.3 循环优化
12.4.4 “短路”表达式
12.4.5 在IF和CASE语句中表达式的顺序
12.4.6 递归
12.4.7 NOCOPY子句
12.4.8 关联数组
12.5 其他优化
12.5.1 本地编译
12.5.2 内联PL/SQL
12.5.3 数据类型
12.5.4 使用JAVA计算
12.5.5 函数缓存
12.6 DML触发器的性能
12.6.1 UPDATE OF和WHEN子句
12.6.2 BEFORE和AFTER ROW触发器
12.7 本章小结
第13章 并行SQL
13.1 理解并行SQL
13.1.1 并行进程和并行度
13.1.2 并行子进程池
13.1.3 并行查询IO
13.1.4 并行性能收益
13.2 决定何时使用并行处理
13.2.1 服务器计算机有多个CPU
13.2.2 被访问的数据放置在多个磁盘驱动器上
13.2.3 使用并行的SQL是长时间运行的或者资源敏感的
13.2.4 SQL执行最少一次全表、索引或分区扫描
13.2.5 主机有空闲的能力
13.2.6 SQL是调优过的
13.3 配置并行处理
13.3.1 确定并行度
13.3.2 并行提示
13.3.3 并行配置的参数
13.4 监控并行SQL
13.4.1 并行语句的执行计划
13.4.2 跟踪并行执行
13.4.3 V$PQ_TQSTAT视图
13.4.4 其他的统计数据
13.5 优化并行的性能
13.5.1 从一个优化过的串行执行的SQL开始
13.5.2 确保这个SQL适合并行执行
13.5.3 确保系统适合配置支持并行执行
13.5.4 确保执行计划的所有部分都做了并行化
13.5.5 确保请求的并行度是可实现的
13.5.6 监控实际的并行度
13.5.7 检查进程间数据和负载的偏差
13.6 其他的并行主题
13.6.1 RAC的并行执行
13.6.2 并行的索引查找
13.6.3 并行DML
13.6.4 并行DDL
13.7 本章小结
第14章 DML调优
14.1 DML性能基础
14.1.1 Where子句优化
14.1.2 索引开销
14.1.3 触发器开销
14.1.4 参照完整性
14.2 INSERT操作的特定优化
14.2.1 批量处理
14.2.2 直接路径插入
14.2.3 多表插入
14.2.4 手动段存储管理(MSSM)和空闲列表
14.2.5 并行DML
14.3 删除操作
14.3.1 TRUNCATE
14.3.2 分区
14.3.3 CREATE TABLE AS SELECT
14.4 更新和合并操作
14.4.1 关联更新
14.4.2 优化MERGE操作
14.5 COMMIT优化
14.5.1 COMMIT频率
14.5.2 批量和NOWAIT提交
14.5.3 NOLOGGING
14.6 本章小结
第四部分 最小化争用
第15章 锁争用
15.1 锁的类型和模式
15.2 等待锁
15.3 监控和分析锁
15.3.1 锁等待的统计数据
15.3.2 发现导致锁争用的SQL
15.3.3 度量指定事务的锁争用
15.3.4 跟踪锁行为
15.3.5 阻塞者和等待者
15.4 应用程序的锁策略
15.5 行级锁什么时候会失败
15.5.1 没有索引的外键
15.5.2 事务表等待
15.5.3 位图索引
15.5.4 直接路径插入
15.6 系统锁
15.6.1 高水位标记enqueue
15.6.2 空间事务enqueue
15.6.3 序列缓存enqueue
15.6.4 用户锁enqueue
15.6.5 其他的系统锁
15.7 本章小结
第16章 闩锁和互斥争用
16.1 闩锁和互斥架构的简介
16.1.1 GETS、SPINS和SLEEPS
16.1.2 互斥
16.2 度量和诊断闩锁/互斥争用
16.2.1 识别单个的闩锁
16.2.2 发现与闩锁等待相关的SQL和段
16.3 特定的闩锁和互斥场景
16.3.1 Library Cache Mutex等待
16.3.2 Library Cache Pin
16.3.3 Shared Pool Latch
16.3.4 Cache Buffers Chains Latch
16.3.5 Row Cache Object闩锁
16.3.6 其他的闩锁场景
16.4 闩锁争用是不可避免的吗
16.4.1 改变_SPIN_COUNT怎么样
16.4.2 自旋计数、闩锁争用和吞吐量
16.4.3 设置单个闩锁的自旋计数
16.5 本章小结
第17章 共享内存争用
17.1 缓冲区高速缓存架构
17.2 空闲缓冲块等待
17.2.1 DBWR直接和异步IO
17.2.2 空闲缓冲块等待的其他补救措施
17.3 恢复写进程等待
17.3.1 提高闪回日志IO
17.3.2 增加闪回日志缓冲的大小
17.4 缓冲忙等待
17.4.1 度量缓冲忙
17.4.2 缓冲忙等待的传统原因
17.4.3 缓冲忙和热块
17.5 重做日志缓冲等待
17.6 本章小结
第五部分 优化内存
第18章 缓冲区高速缓存调优
18.1 缓冲区高速缓存的原理
18.1.1 最近最少使用列表
18.1.2 表扫描处理
18.1.3 CACHE属性
18.1.4 直接路径IO
18.2 缓冲区高速缓存配置和调优
18.2.1 监控缓冲区高速缓存
18.2.2 缓冲区高速缓存命中率
18.2.3 多个缓冲区高速缓存
18.2.4 设置缓冲区高速缓存的大小
18.3 自动共享内存管理
18.3.1 实现ASMM
18.3.2 监控重设大小操作
18.3.3 调优ASMM
18.3.4 非默认池
18.3.5 内存抖动
18.4 本章小结
第19章 优化PGA内存
19.1 IO和PGA内存
19.2 PGA内存管理
19.2.1 PGA_AGGREGATE_TARGET
19.2.2 会话的PGA限制
19.3 测量PGA的使用和效率
19.3.1 会话的PGA利用率
19.3.2 测量临时IO等待时间
19.3.3 测量工作区活动
19.4 用V$PGA_TARGET_ADVICE来设置PGA的大小
19.5 覆写PGA总量目标
19.6 本章小结
第20章 其他的内存管理主题
20.1 优化整体的Oracle内存
20.1.1 IO等待时间和内存优化
20.1.2 使用顾问来分配PGA和缓冲区高速缓存的内存
20.1.3 Oracle 11g的自动化内存管理
20.2 结果集缓存
20.2.1 启用和配置结果集缓存
20.2.2 结果集缓存的统计数据
20.2.3 结果集缓存的依赖
20.2.4 结果集缓存闩锁
20.3 其他的内存优化
20.3.1 设置共享池的大小
20.3.2 设置大池的大小
20.3.3 重做日志缓存
20.3.4 锁定SGA
20.4 本章小结
第六部分 IO调优和集群
第21章 磁盘IO调优基础
21.1 磁盘IO的概念
21.1.1 服务时间和吞吐量
21.1.2 排队
21.1.3 磁盘驱动器:慢和正在变得更慢
21.1.4 磁盘容量和数据分布
21.2 Oracle IO架构
21.2.1 数据文件单块读
21.2.2 多块读
21.2.3 直接路径读
21.2.4 临时直接路径IO
21.2.5 数据文件写IO
21.2.6 直接路径写
21.2.7 重做日志IO
21.2.8 归档日志IO
21.2.9 闪回IO
21.2.10 控制文件IO
21.3 度量和监控Oracle IO
21.3.1 IO等待次数
21.3.2 监控数据文件IO
21.3.3 IO基准测试
21.4 优化数据文件IO
21.4.1 最小化IO延时
21.4.2 最大化IO吞吐量
21.4.3 条带化策略
21.4.4 RAID阵列
21.4.5 隔离数据文件IO
21.5 重做和归档优化
21.5.1 交替和分发日志
21.5.2 重做和归档设备的细粒度条带化
21.5.3 对重做日志使用RAID5大声说不
21.5.4 重做日志大小
21.6 闪回日志
21.7 本章小结
第22章 高级IO技术
22.1 自动存储管理
22.1.1 ASM架构
22.1.2 ASM监控
22.1.3 ASM调优
22.2 固态磁盘(SSD)
22.2.1 基于闪存的SSD
22.2.2 基于随机存储器的DDR
SSD
22.2.3 混合的SSD
22.2.4 为Oracle数据库使用SSD
22.3 EXADATA存储服务器
22.4 数据库块大小
22.5 本章小结
第23章 优化RAC
23.1 RAC概览
23.1.1 全局缓存请求
23.1.2 RAC调优原则
23.1.3 单实例调优和RAC
23.2 度量集群开销
23.3 减少全局缓存延时
23.3.1 度量全局缓存延时
23.3.2 检查内部互连
23.3.3 内部互连问题的信号
23.4 优化内部互连
23.4.1 网络硬件和协议
23.4.2 以太网特大帧
23.4.3 UDP缓冲大小
23.4.4 LMS等待
23.5 集群负载均衡
23.5.1 评估集群负载均衡
23.5.2 集群负载均衡和服务
23.5.3 RAC负载均衡服务
23.6 最小化全局缓存请求
23.6.1 高的全局缓存请求比例的原因
23.6.2 度量全局缓存请求比例
23.6.3 减少全局缓存请求的技巧
23.7 本章小结
参考书目
猜您喜欢