描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787302419563
内容简介
经证实的PL/SQL优化解决方案
在《Oracle PL/SQL性能调优诀窍与方法》这本书中,作为Oracle ACE的两位作者给出了一种方便的能够从PL/SQL获取*结果的方法,他们有着数十年为政府、企业和教育机构创建复杂生产系统的经验。本书首先介绍了精确定位性能问题的方法,并提供了可度量和验证的测试案例。在深入探讨SQL和PL/SQL的结合使用方法之后,又深入挖掘了适用于Oracle数据库的性能调优工具。本书通篇包含真实的示例和*实践。
主要内容
●
按照需求驱动的9步过程来识别和定位Web应用中的性能问题
●
使用性能相关的数据库工具,包括数据字典视图、日志、追踪、PL/SQL
Hierarchical Profiler(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
第Ⅰ部分 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
前 言
前 言
当你听说或读到有关PL/SQL性能调优时,一定要明白,通常人们说的某些东西和你想象的截然不同:不仅仅是PL/SQL代码本身!真正的主题要宽泛得多――人们想要的,是把PL/SQL用作粘合剂,把所有能得到的元素和技术(包括SQL、XML、Java等)片段粘合在一起,以此来优化Oracle数据库。
PL/SQL的普适性决定了本书的结构。第Ⅰ部分(第1~3章)始于“宏图”而不去管代码细节。系统调优的全局性方法把努力集中于更为关键的性能问题领域,而不是仅集中于可见的那些问题上,这些方法是通过用户需求的9步表示法来说明的。然而,如果“归咎于数据库”的陈词滥调还存在的话,就需要有好的、的设备(要么来自Oracle,要么来自本土)来解决这些问题。
第Ⅱ部分(第4~6章)解决PL/SQL使用中关键领域的问题,即它与SQL的集成。这一主题很容易分成三个逻辑块:SQL中的PL/SQL(用户定义的函数功能)、PL/SQL中的SQL(鼠标和批操作)、编写有效的触发器。贯穿本部分的主题是,化是由在SQL和PL/SQL之间适当地分配负载组成的。当然,编写有效的代码和使用实践是必要的,但目前数据库的环境是复杂的,需要许多不同的资源。由于上述因素,就需要通过调整功能平衡来获取可用资源的价值。
PL/SQL是一种丰富的语言环境,包含很多同等重要的特性。然而其中有些特性的同等重要性比其他特性更高。在第Ⅲ部分(第7~9章)所涉及的主题中,作者们选取了常用的性能优化技术中的两个技术(Dynamic SQL和缓存机制),以及被滥用和误解的技术之中的一个技术(高级数据类型)。
第Ⅳ部分(第10~12章)提醒我们,尽管发现新功能和再架构数据库环境具有很大的乐趣,但事实上,性能调优专家的日常工作却主要是进行细致的、耗时的研究,随时准备和进行修整(此处就需要版本控制了!),并调整各处出现的看似微小的事物(但它们合并起来就不小了!)。
本书包括4部分,分为12章。
第Ⅰ部分:PL/SQL性能调优的核心理念和要素
第1章 “PL/SQL在当前开发中的角色”
本章讨论性能调优对任何数据库系统的重要性。本章介绍Web应用程序所用的9步过程,并识别所有可能产生性能问题的地方。本章也提供处理此类问题领域中每种问题的策略。
第2章 “DBA/开发者的界线:工具和特性”
第2章讨论开发者和DBA间的协同,这是创建成功的、有效执行的数据库系统所需的。本章列出并解释性能调优的关键要素,包括数据字典视图、日志、跟踪、PL/SQL Hierarchical Profiler、PL/Scope和RUNSTATS。
第3章 “PL/SQL中的代码插桩”
本章介绍多个用于定位性能问题的代码插入方法。本章讨论如何确定性能问题是否真的是由数据库问题引起的,还说明了诸如调用栈API、差错栈API和计时器之类的信息源是如何被用来帮助定位和检修数据库的性能问题的。
第Ⅱ部分:链接SQL和PL/SQL
第4章 “扩展SQL的范围”
正确理解用户定义的函数在SQL环境中是怎样工作的是成功开发数据库的关键因素之一。第4章涉及如何管理用户定义的函数的统计数量和如何影响调用总数。本章也包括PL/SQL延伸SQL的已有功能(诸如定制聚合功能和返回对象集合功能)等的场景。只有Oracle Database 12c拥有的以降低SQL和PL/SQL(PRAGMA UDF子句和WITH子句中的各种函数)之间上下文切换的成本,甚至以取消这种切换为目的的特性,被用来说明管理此类切换的重要性。
第5章 “用集合的概念来思考”
本章强调在集成SQL和PL/SQL时以集合的方式进行思考的重要性。数据量非常大时,需要内部优化,这可以用基于集合的方法来完成。FORALL子句和MULTISET操作的适当使用是创建成功的和可伸缩的数据库解决方案的关键因素。
第6章 “使用触发器”
本章涉及触发器在系统性能中的关键角色,包含不适当使用触发器导致系统过载并引起性能下降的例子,以及对反规范化的讨论。有关几个方法的权衡的分析有助于决定何时使用、何时不使用特定的触发器类型。
第Ⅲ部分:调优人员的工具包
第7章 “不仅限于标量数据类型”
高级数据类型是Oracle开发者和DBA需要理解和使用的重要工具。第7章讨论LOB和XML的用法以及它们可能对系统性能的影响。本章也包含XMLType和XQuery语言的例子,还有使用高级数据类型的诀窍和技术。
第8章 “保持使用缓存”
Oracle数据库有不同的与PL/SQL相关的缓存选项。对于有效的数据库系统运行来讲,了解这些机制是如何工作的以及会产生对性能有影响的什么样的副作用是很关键的。本章讨论各种不同的方法,诸如DETERMINISTIC子句、标量子查询、PL/SQL Function Result Cache等,如何能用来提高数据库的性能。
第9章 “射击移动目标”
Dynamic SQL是一个广泛涉及但又常被误解的概念。错用这一特性会给系统带来极大的毁坏。第9章介绍如何正确使用Dynamic SQL来减少所需的代码量和使得系统管理更容易、更有效。近来,在Oracle Database版本11g和12c所改进的内容中,已经扩展了对Dynamic SQL的支持,本章对此也有讨论。
第Ⅳ部分:日常生活中的PL/SQL
第10章 “来自战壕的传奇”
在第10章中,你会看到是什么使性能调优专家不停地忙碌。通常,这种工作耗时间的地方不是如何修复问题,而是如何确切定位问题区域。把“这个程序太慢”这一问题精确到“这个函数常出问题”需要大量的技巧和耐心。另外,确信整体系统架构是稳定的且能够支持需求也是需要大量时间的。总之,所有的事情都可归结为管理和预测资源利用率。书中使用大量真实的例子来说明这一点。
第11章 “真实系统中的代码管理”
尽管版本控制与性能调优没有直接的联系,但它在系统的生命周期中却扮演着重要的角色。本章介绍如何在生产环境中执行计划好的修改而不产生任何新的问题和副作用。本章也探讨了代码管理的不同方法(人工的和自动的),包括Oracle自己的Edition-Based Redefinition (EBR)。
第12章 “额外的秘诀、技巧和理念”
每个Oracle开发者和DBA都在长期的工作中积累了一系列用于成功创建数据库系统的秘诀和技巧。第12章提供作者从长期经验中领悟到的实践,可帮助读者优化和提高代码的效率。所涉及的主题包括通用数据类型的空间分配、通过参考来传递变量和管道化函数。
本书适合于以下读者:
● 希望提高开发技能的初中级Oracle PL/SQL开发人员。
● 有其他编程语言(例如Java)经验且正在Oracle环境中工作的开发人员。
● 运行Oracle应用程序的组织中的技术人员,包括DBA和数据库架构师。
示例获取
书中所有的SQL脚本、程序和其他文件都能从Oracle Press网站下载。文件都压缩在一个zip文件中。下载该zip文件后,需要将其内容解压缩。解压缩后,会产生一个名为PLSQL_Tuning的文件夹,其中从第2章开始,每一章都有一个专门的子文件夹(第1章没有任何脚本)。
当你听说或读到有关PL/SQL性能调优时,一定要明白,通常人们说的某些东西和你想象的截然不同:不仅仅是PL/SQL代码本身!真正的主题要宽泛得多――人们想要的,是把PL/SQL用作粘合剂,把所有能得到的元素和技术(包括SQL、XML、Java等)片段粘合在一起,以此来优化Oracle数据库。
PL/SQL的普适性决定了本书的结构。第Ⅰ部分(第1~3章)始于“宏图”而不去管代码细节。系统调优的全局性方法把努力集中于更为关键的性能问题领域,而不是仅集中于可见的那些问题上,这些方法是通过用户需求的9步表示法来说明的。然而,如果“归咎于数据库”的陈词滥调还存在的话,就需要有好的、的设备(要么来自Oracle,要么来自本土)来解决这些问题。
第Ⅱ部分(第4~6章)解决PL/SQL使用中关键领域的问题,即它与SQL的集成。这一主题很容易分成三个逻辑块:SQL中的PL/SQL(用户定义的函数功能)、PL/SQL中的SQL(鼠标和批操作)、编写有效的触发器。贯穿本部分的主题是,化是由在SQL和PL/SQL之间适当地分配负载组成的。当然,编写有效的代码和使用实践是必要的,但目前数据库的环境是复杂的,需要许多不同的资源。由于上述因素,就需要通过调整功能平衡来获取可用资源的价值。
PL/SQL是一种丰富的语言环境,包含很多同等重要的特性。然而其中有些特性的同等重要性比其他特性更高。在第Ⅲ部分(第7~9章)所涉及的主题中,作者们选取了常用的性能优化技术中的两个技术(Dynamic SQL和缓存机制),以及被滥用和误解的技术之中的一个技术(高级数据类型)。
第Ⅳ部分(第10~12章)提醒我们,尽管发现新功能和再架构数据库环境具有很大的乐趣,但事实上,性能调优专家的日常工作却主要是进行细致的、耗时的研究,随时准备和进行修整(此处就需要版本控制了!),并调整各处出现的看似微小的事物(但它们合并起来就不小了!)。
本书包括4部分,分为12章。
第Ⅰ部分:PL/SQL性能调优的核心理念和要素
第1章 “PL/SQL在当前开发中的角色”
本章讨论性能调优对任何数据库系统的重要性。本章介绍Web应用程序所用的9步过程,并识别所有可能产生性能问题的地方。本章也提供处理此类问题领域中每种问题的策略。
第2章 “DBA/开发者的界线:工具和特性”
第2章讨论开发者和DBA间的协同,这是创建成功的、有效执行的数据库系统所需的。本章列出并解释性能调优的关键要素,包括数据字典视图、日志、跟踪、PL/SQL Hierarchical Profiler、PL/Scope和RUNSTATS。
第3章 “PL/SQL中的代码插桩”
本章介绍多个用于定位性能问题的代码插入方法。本章讨论如何确定性能问题是否真的是由数据库问题引起的,还说明了诸如调用栈API、差错栈API和计时器之类的信息源是如何被用来帮助定位和检修数据库的性能问题的。
第Ⅱ部分:链接SQL和PL/SQL
第4章 “扩展SQL的范围”
正确理解用户定义的函数在SQL环境中是怎样工作的是成功开发数据库的关键因素之一。第4章涉及如何管理用户定义的函数的统计数量和如何影响调用总数。本章也包括PL/SQL延伸SQL的已有功能(诸如定制聚合功能和返回对象集合功能)等的场景。只有Oracle Database 12c拥有的以降低SQL和PL/SQL(PRAGMA UDF子句和WITH子句中的各种函数)之间上下文切换的成本,甚至以取消这种切换为目的的特性,被用来说明管理此类切换的重要性。
第5章 “用集合的概念来思考”
本章强调在集成SQL和PL/SQL时以集合的方式进行思考的重要性。数据量非常大时,需要内部优化,这可以用基于集合的方法来完成。FORALL子句和MULTISET操作的适当使用是创建成功的和可伸缩的数据库解决方案的关键因素。
第6章 “使用触发器”
本章涉及触发器在系统性能中的关键角色,包含不适当使用触发器导致系统过载并引起性能下降的例子,以及对反规范化的讨论。有关几个方法的权衡的分析有助于决定何时使用、何时不使用特定的触发器类型。
第Ⅲ部分:调优人员的工具包
第7章 “不仅限于标量数据类型”
高级数据类型是Oracle开发者和DBA需要理解和使用的重要工具。第7章讨论LOB和XML的用法以及它们可能对系统性能的影响。本章也包含XMLType和XQuery语言的例子,还有使用高级数据类型的诀窍和技术。
第8章 “保持使用缓存”
Oracle数据库有不同的与PL/SQL相关的缓存选项。对于有效的数据库系统运行来讲,了解这些机制是如何工作的以及会产生对性能有影响的什么样的副作用是很关键的。本章讨论各种不同的方法,诸如DETERMINISTIC子句、标量子查询、PL/SQL Function Result Cache等,如何能用来提高数据库的性能。
第9章 “射击移动目标”
Dynamic SQL是一个广泛涉及但又常被误解的概念。错用这一特性会给系统带来极大的毁坏。第9章介绍如何正确使用Dynamic SQL来减少所需的代码量和使得系统管理更容易、更有效。近来,在Oracle Database版本11g和12c所改进的内容中,已经扩展了对Dynamic SQL的支持,本章对此也有讨论。
第Ⅳ部分:日常生活中的PL/SQL
第10章 “来自战壕的传奇”
在第10章中,你会看到是什么使性能调优专家不停地忙碌。通常,这种工作耗时间的地方不是如何修复问题,而是如何确切定位问题区域。把“这个程序太慢”这一问题精确到“这个函数常出问题”需要大量的技巧和耐心。另外,确信整体系统架构是稳定的且能够支持需求也是需要大量时间的。总之,所有的事情都可归结为管理和预测资源利用率。书中使用大量真实的例子来说明这一点。
第11章 “真实系统中的代码管理”
尽管版本控制与性能调优没有直接的联系,但它在系统的生命周期中却扮演着重要的角色。本章介绍如何在生产环境中执行计划好的修改而不产生任何新的问题和副作用。本章也探讨了代码管理的不同方法(人工的和自动的),包括Oracle自己的Edition-Based Redefinition (EBR)。
第12章 “额外的秘诀、技巧和理念”
每个Oracle开发者和DBA都在长期的工作中积累了一系列用于成功创建数据库系统的秘诀和技巧。第12章提供作者从长期经验中领悟到的实践,可帮助读者优化和提高代码的效率。所涉及的主题包括通用数据类型的空间分配、通过参考来传递变量和管道化函数。
本书适合于以下读者:
● 希望提高开发技能的初中级Oracle PL/SQL开发人员。
● 有其他编程语言(例如Java)经验且正在Oracle环境中工作的开发人员。
● 运行Oracle应用程序的组织中的技术人员,包括DBA和数据库架构师。
示例获取
书中所有的SQL脚本、程序和其他文件都能从Oracle Press网站下载。文件都压缩在一个zip文件中。下载该zip文件后,需要将其内容解压缩。解压缩后,会产生一个名为PLSQL_Tuning的文件夹,其中从第2章开始,每一章都有一个专门的子文件夹(第1章没有任何脚本)。
评论
还没有评论。