在《Oracle PL/SQL性能调优诀窍与方法》这本书中,作为Oracle ACE的两位作者给出了一种方便的能够从PL/SQL获取最佳结果的方法,他们有着数十年为政府、企业和教育机构创建复杂生产系统的经验。本书首先介绍了精确定位性能问题的方法,并提供了可度量和验证的测试案例。在深入探讨SQL和PL/SQL的结合使用方法之后,又深入挖掘了适用于Oracle数据库的性能调优工具。本书通篇包含真实的示例和最佳实践。
依照要求驱动器的9步全过程来鉴别和定位Web运用中的性能难题
应用性能有关的数据库工具,包含数据字典主视图、系统日志、跟踪、PL/SQLHierarchicalProfiler(PL/SQL层级式解析器)、PL/Scope和RUNSTATS
应用启用堆栈API、不正确堆栈API和记时标识插装编码,便于定位性能难题
嵌入于SQL中的PL/SQL和管理方法客户界定的涵数
应用一种根据结合的方式把SQL置入PL/SQL中便于解决很多数据信息
恰当撰写和部署DML触发器原理以防止性能难题
用高級基本数据类型开展工作中,包含LOB和XML
应用缓存文件技术性防止数据冗余实际操作
合理地利用动态性SQL来降低需要的编码量和生产流水线管理信息系统
管理方法版本控制并保证性能修补获得取得成功部署
目录
- 第Ⅰ部分 PL/SQL性能调优的核心理念和要素
- 第1章 PL/SQL在当前开发中的角色 3
- 1.1 典型的Web应用程序处理流程 3
- 1.2 Web应用程序的性能问题区域 4
- 1.2.1 步骤1:客户机的性能问题 4
- 1.2.2 步骤2:客户机到应用服务器的传输问题 5
- 1.2.3 步骤3:应用服务器的性能问题 5
- 1.2.4 步骤4:应用服务器到数据库的传输问题 5
- 1.2.5 步骤5:数据库的性能问题 5
- 1.2.6 步骤6:数据库到应用服务器的传输问题 6
- 1.2.7 步骤7:应用服务器处理性能问题 6
- 1.2.8 步骤8:应用服务器到客户机的传输问题 6
- 1.2.9 步骤9:客户机的性能问题 6
- 1.3 发现使得Web应用程序性能变慢的原因 6
- 1.3.1 使用计时器来收集有关性能的数据 7
- 1.3.2 性能测量 8
- 1.4 解决Web应用程序的性能问题 9
- 1.4.1 解决客户机的性能问题(步骤1和9) 9
- 1.4.2 分清客户机和应用服务器之间的性能问题(步骤2) 9
- 1.4.3 解决应用服务器中的性能问题(步骤3和7) 10
- 1.4.4 解决客户机中的性能问题(步骤9) 10
- 1.4.5 心得 10
- 1.5 总结 10
- 第2章 DBA/开发者的界线:工具和特性 13
- 2.1 数据字典视图 14
- 2.2 Oracle日志记录和跟踪 16
- 2.2.1 日志记录的基础知识 16
- 2.2.2 跟踪的基础知识 17
- 2.2.3 日志记录/跟踪示例 18
- 2.3 PL/SQL层次式分析器 20
- 2.4 RUNSTATS 23
- 2.5 PL/SQL环境设置 24
- 2.5.1 PLSQL_OPTIMIZE_LEVEL 25
- 2.5.2 PLSQL_CODE_TYPE 27
- 2.5.3 PLSQL_WARNINGS 29
- 2.5.4 PLSQL_CCFLAGS 31
- 2.6 PL/Scope 31
- 2.7 总结 33
- 第3章 PL/SQL中的代码插桩 35
- 3.1 问题真的出在数据库中吗 36
- 3.2 应用程序日志 37
- 3.2.1 内置代码导航API 37
- 3.2.2 用户驱动的日志 39
- 3.3 代码插桩的最佳实践 43
- 3.3.1 设置过程标记 44
- 3.3.2 设置错误标记 46
- 3.4 总结 47
- 第Ⅱ部分 链接SQL和PL/SQL
- 第4章 扩展SQL的范围 51
- 4.1 跳出SQL模式 52
- 4.1.1 切换至PL/SQL,使生活变得更简单 52
- 4.1.2 使用PL /SQL填补功能空白 55
- 4.2 调用SQL内置函数 59
- 4.2.1 单表问题 60
- 4.2.2 多表问题 63
- 4.3 和PL/SQL相关的统计及其对执行计划的影响 64
- 4.3.1 PL /SQL函数的硬件成本 64
- 4.3.2 PL/SQL函数的基数 70
- 4.3.3 PL/SQL函数的选择率 74
- 4.4 只有Oracle Database 12c才有的特性 77
- 4.4.1 PRAGMA UDF子句 77
- 4.4.2 在WITH子句中添加函数 78
- 4.5 总结 79
- 第5章 用集合的概念来思考 81
- 5.1 游标 82
- 5.2 从SQL到PL/SQL加载集合 83
- 5.2.1 Oracle Database 12c:隐式分页与持续获取 88
- 5.2.2 用PL/SQL合并集合 90
- 5.3 FORALL语句 94
- 5.3.1 保持语法最新:稀疏集合 96
- 5.3.2 直接插入 98
- 5.3.3 FORALL和表触发器 99
- 5.4 总结 101
- 第6章 使用触发器 103
- 6.1 DML触发器 104
- 6.1.1 数据保护:约束与触发器 104
- 6.1.2 默认值 107
- 6.1.3 非规范化的代价 110
- 6.2 INSTEAD OF触发器 112
- 6.2.1 基本的DML操作 112
- 6.2.2 逻辑主键的危害 115
- 6.2.3 处理UPDATE语句 117
- 6.3 总结 120
- 第Ⅲ部分 调优人员的工具包
- 第7章 不仅限于标量数据类型 125
- 7.1 LOB的管理 126
- 7.1.1 访问LOB 126
- 7.1.2 存储机制 127
- 7.1.3 I/O调优注意事项 129
- 7.1.4 仅SecureFile才有的特性 135
- 7.2 管理XML 139
- 7.2.1 存储XML 139
- 7.2.2 操作XML 144
- 7.3 总结 148
- 第8章 保持使用缓存 151
- 8.1 内置缓存技术 151
- 8.1.1 确定性函数 152
- 8.1.2 标量子查询缓存 156
- 8.1.3 PL/SQL函数结果缓存 158
- 8.2 手动缓存技术 165
- 8.2.1 PL/SQL集合 166
- 8.2.2 Oracle上下文 168
- 8.3 总结 169
- 第9章 射击移动目标 171
- 9.1 扩展基础知识 172
- 9.1.1 CLOB输入 172
- 9.1.2 光标转换 173
- 9.1.3 PL/SQL函数结果缓存的
- 集成 173
- 9.1.4 支持复杂的数据类型 175
- 9.2 深度挖掘 179
- 9.2.1 有关搜索的更多内容 179
- 9.2.2 列表内陷阱 182
- 9.3 应对Dynamic SQL误解带来的挑战 183
- 9.3.1 偏见#1:Dynamic SQL会引起安全风险 184
- 9.3.2 偏见#2:Dynamic SQL总是比正规的SQL慢 184
- 9.3.3 偏见#3:Dynamic SQL总是引起解析 185
- 9.3.4 偏见#4:DDL语句只能服务于DBA 187
- 9.4 总结 188
- 第Ⅳ部分 日常生活中的PL/SQL
- 第10章 来自战壕的传奇 191
- 10.1 第三方的打包代码 191
- 10.2 无状态问题 194
- 10.3 未知的撤消 197
- 10.4 递归的诅咒 200
- 10.4.1 递归和光标 200
- 10.4.2 递归和变量 203
- 10.5 总结 203
- 第11章 真实系统中的代码管理 205
- 11.1 代码管理的问题 206
- 11.1.1 DBA的Lite版 207
- 11.1.2 国产版本控制 209
- 11.2 基于版本的重定义和性能调优 213
- 11.2.1 理解Edition-Based Redefinition 213
- 11.2.2 在Oracle Database 12c中对EBR所做的重要修改 214
- 11.3 系统环境的差异以及与性能相关的代码管理 217
- 11.4 总结 218
- 第12章 额外的秘诀、技巧和理念 221
- 12.1 回到基础 221
- 12.1.1 VARCHAR2内存的分配 222
- 12.1.2 当前日期的成本 223
- 12.1.3 二进制数据类型 225
- 12.2 文本操作 226
- 12.2.1 检查文本字符串的有效字符 226
- 12.2.2 词的相似度 228
- 12.2.3 VARCHAR2和视图 230
- 12.3 增加处理的复杂性 232
- 12.3.1 NOCACHE优化 232
- 12.3.2 ACCESSIBLE BY子句 234
- 12.3.3 关于流水线函数的更多
- 知识 235
- 12.4 总结 236