书籍详情
Oracle PL/SQL性能调优诀窍与方法
作者:(美)罗森布拉姆(Rosenblum M.),(美)多西(Dorsey P.)著
出版社:清华大学出版社
出版时间:2015-11-01
ISBN:9787302419563
定价:¥49.80
购买这本书可以去
内容简介
经证实的PL/SQL优化解决方案在《Oracle PL/SQL性能调优诀窍与方法》这本书中,作为Oracle ACE的两位作者给出了一种方便的能够从PL/SQL获取最佳结果的方法,他们有着数十年为政府、企业和教育机构创建复杂生产系统的经验。本书首先介绍了精确定位性能问题的方法,并提供了可度量和验证的测试案例。在深入探讨SQL和PL/SQL的结合使用方法之后,又深入挖掘了适用于Oracle数据库的性能调优工具。本书通篇包含真实的示例和最佳实践。主要内容● 按照需求驱动的9步过程来识别和定位Web应用中的性能问题● 使用性能相关的数据库工具,包括数据字典视图、日志、追踪、PL/SQLHierarchical Profiler(PL/SQL层次式分析器)、PL/Scope和RUNSTATS● 使用调用堆栈API、错误堆栈API和计时标记插装代码,以便定位性能问题● 内嵌于SQL中的PL/SQL和管理用户定义的函数● 使用一种基于集合的方法把SQL嵌入PL/SQL中以便处理大量数据● 正确编写和部署DML触发器以避免性能问题● 用高级数据类型进行工作,包括LOB和XML● 使用缓存技术避免冗余操作● 有效地利用动态SQL来减少所需的代码量和流水线系统管理● 管理版本控制并确保性能修复得到成功部署
作者简介
Michael Rosenblum是Dulcian,Inc.的一位软件架构师/高级DBA,负责系统调优和设计应用程序体系架构。Michael通过编写复杂的PL/SQL例程和研究新特性来为Dulcian的开发者提供支持。他是PL/SQL for Dummies(Wiley Press, 2006)一书的合著者,是Expert PL/SQL Practices (Apress, 2011)一书的贡献作者,也是大量与数据库相关的期刊文章和会议论文的作者。Michael是一位Oracle ACE,是众多Oracle用户组会议的活跃主持人,包括Oracle OpenWorld、ODTUG、IOUG Collaborate、RMOUG、NYOUG等,并获得了ODTUGKaleidoscope的2009年度最佳演讲人奖。他的祖国是乌克兰,他以优等生的身份毕业于基辅国家经济大学,获得信息系统专业的科学硕士学位。PaulDorsey博士是Dulcian,Inc.的创始人和总裁,这是一家Oracle咨询公司,专门从事业务规则和基于Web的应用程序开发。他是Dulcian,Inc.的Business Rules Information Manager (BRIM)产品工具的总架构师,还是Oracle出版社出版的7本书的合著者,这些书涵盖了Designer、数据库设计、Developer和JDeveloper等主题,已被翻译为9种语言,他还是Wiley出版社出版的PL/SQL for Dummies图书的合著者。Paul是一位Oracle ACE,并且是第一个进入IOUG SELECT名人堂的人。他是NYOUG的名誉主席。Paul于2003年被ODTUG授予年度志愿者称号,2001年被IOUG授予年度志愿者称号,是最早被Oracle授予Oracle 9i认证大师称号的6泰斗之一。Paul提交的用于为ThePreeclampsia Foundation收集数据的Survey Generator赢得了2007年度Oracle Fusion Middleware DeveloperChallenge奖,Oracle选择他作为2007年度的PL/SQL Developer。
目录
目 录
第Ⅰ部分 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
猜您喜欢