基于成本的Oracle优化法则

基于成本的Oracle优化法则"

作者:
ISBN:9787302153894
定价:¥58
字数:千字
页数:
出版时间:2007.07.01
开本:
版次:1-2
装帧:
出版社:清华大学出版社
简介

在《基于成本的Oracle优化法则》一书中(本系列三本中的第一本),我们讨论了最通用的模式,优化器如何基于统计信息进行优化,以及为什么有时候优化的结果不尽如人意。这样,通过调整模式或创建出更切合实际的统计信息,您就可以纵览整个问题而不必拘泥于单个SQL语句。如果本应该以最优的执行方式,而且也花费了非常多的时间想要优化器能够按照自己的方式来进行优化,但是优化器的执行却完全不是那么回事,那么我建议您读读这本书。

前言

  我们日常生活的很多方面都离不开数据库的支持,从银行业务、电话缴费乃至小型家庭账本系统都能看到数据库的影子。近年来,数据库技术的发展非常迅速,有关数据库的理论和方法是计算机科学教育领域必不可少的内容。Oracle公司是数据库技术领域的佼佼者,其主打的商用数据库管理系统Oracle经过多年的发展,目前最新的版本为Oracle 10g。

  市场上关于Oracle的书籍林林总总,各有千秋,但其中很大一部分都偏重于介绍Oracle的具体应用。与这些书籍不同,这本由Oracle数据库技术大师Jonathan Lewis撰写的《基于成本的Oracle优化法则》着重介绍如何优化Oracle的性能,提高Oracle的效率。

  Oracle 提供了基于成本(CostBased)的优化器和基于规则(RuleBased)的优化器,简称为CBO和RBO,用于确定查询操作的执行计划。CBO是依赖于表的一些统计信息来选择最低成本的执行计划,当这些统计信息不准确时,产生的计划便可能不是最佳的。因此,如何正确使用CBO十分重要。本书着重分析CBO的原理和执行过程。

  Jonathan Lewis先生用22个月完成的著作,让我们在翻译时不敢松懈,只能加倍努力。这本书理论较深,作者刨根问底,很多关于成本的计算方式十分精细,可能读起来需要一定的耐心,但是如果读者是对程序要求同样精细的人,并且所开发的应用程序要求较高的性能,那么阅读本书将让您受益匪浅。作者成功地将深奥难懂的优化理论变得通俗易懂,在介绍过程中穿插大量的示例,由点及面,全面生动地介绍了相关的优化理论。作者非常注重于将Oracle 10g与Oracle的以前版本(8i和9i)进行比较,如果对Oracle 8i/9i较为熟悉,那么掌握这些新的理论也就是轻而易举的事情了。

  本书面向Oracle数据库管理员和对Oracle有一定开发经验的工程人员,也可供数据库优化方面的研究人员阅读。由于本书覆盖面广,时间较紧,翻译难度比较大,虽然在翻译中下了不少功夫,并用了较长的时间进行校对,但在译文中仍难免出现一些疏漏,恳请读者批评指正。

  

  译  者  

  

  

 

  

  

目录

目    录

第1章  成本的含义 1

1.1  优化器选项 2

1.2  成本的定义 3

1.3  变换和成本计算 5

1.4  所见未必即所得 8

1.5  本章小结 8

1.6  测试用例 8

第2章  表扫描 9

2.1  入门 10

2.2  提高 14

2.2.1  块大小的影响 14

2.2.2  CPU成本计算 16

2.2.3  CPU成本计算的作用 22

2.3  BCHR 24

2.4  并行执行 27

2.5  索引快速全扫描 30

2.6  分区 32

2.7  本章小结 37

2.8  测试用例 37

第3章  单表选择率 39

3.1  入门 40

3.2  空值 42

3.3  使用列表 43

3.4  区间谓词 48

3.5  双谓词 52

3.6  多谓词的相关问题 54

3.7  本章小结 56

3.8  测试用例 57

第4章  简单B树访问 59

4.1  索引成本计算的基础知识 60

4.2  入门 61

4.2.1  有效索引选择率 63

4.2.2  有效表选择率 64

4.2.3  clustering_factor 65

4.2.4  综合计算 67

4.2.5  扩展算法 68

4.2.6  3个选择率 74

4.3  CPU成本计算 78

4.4  待处理的零碎问题 80

4.5  本章小结 81

4.6  测试用例 81

第5章  群集因子 83

5.1  基本示例 84

5.1.1  减少表争用

(多个自由列表) 86

5.1.2  减少叶块的争用(反转键

索引,ReverseKey Index) 89

5.1.3  减少表的争用(ASSM) 92

5.1.4  减少RAC中的争用

(自由列表群) 95

5.2  列顺序 96

5.3  额外的列 99

5.4  校正统计信息 101

5.4.1  sys_op_countchg()技术 101

5.4.2  非正式策略 105

5.5  待处理的零碎问题 106

5.6  本章小结 107

5.7  测试用例 107

第6章  选择率的相关问题 109

6.1  不同的数据类型 110

6.1.1  日期类型 110

6.1.2  字符类型 110

6.1.3  愚蠢的数据类型 112

6.2  前导零 116

6.3  致命的默认值 117

6.4  离散数据的风险 119

6.5  令人惊奇的sysdate 123

6.6  函数表示 125

6.7  相互关联的列 126

6.7.1  动态采样 129

6.7.2  优化器配置文件 132

6.8  传递闭包 133

6.9  产生约束的谓词 136

6.10  本章小结 139

6.11  测试用例 139

第7章  直方图 141

7.1  入门 142

7.2  普通直方图 147

7.2.1  直方图和绑定变量 147

7.2.2  Oracle何时忽略直方图 149

7.3  频率直方图 152

7.3.1  伪造频率直方图 155

7.3.2  注意事项 156

7.4  “高度均衡”直方图 157

7.5  重新审视数据问题 163

7.5.1  愚蠢的数据类型 163

7.5.2  危险的默认值 166

7.6  本章小结 167

7.7  测试用例 168

第8章  位图索引 169

8.1  入门 170

8.1.1  索引组件 174

8.1.2  表组件 175

8.2  位图合并 177

8.2.1  较低的基数 179

8.2.2  空值列 182

8.3  CPU成本计算 185

8.4  一些有趣的示例 186

8.4.1  多列索引 187

8.4.2  位图连接索引 187

8.4.3  位图转换 188

8.5  本章小结 191

8.6  测试用例 192

第9章  查询变换 193

9.1  入门 194

9.2  过滤 197

9.2.1  过滤优化 200

9.2.2  标量子查询 202

9.2.3  子查询分解 208

9.2.4  复杂视图合并 213

9.2.5  推入谓词 215

9.3  一般子查询 216

9.3.1  子查询参数 218

9.3.2  分类 219

9.3.3  半连接 224

9.3.4  反连接 226

9.3.5  反连接异常 228

9.3.6  Null和Notin 229

9.3.7  有序提示 231

9.4  星型变换连接 232

9.5  星型连接 237

9.6  展望 239

9.7  本章小结 240

9.8  测试用例 241

第10章  连接基数 243

10.1  基本的连接基数 244

10.2  实际SQL的连接基数 249

10.3  扩展和异常情况 252

10.3.1  使用范围的连接 252

10.3.2  不等于 253

10.3.3  重叠 256

10.3.4  直方图 257

10.3.5  传递闭包 260

10.4  三表连接 264

10.5  空值 267

10.6  实现问题 270

10.7  困难之处 274

10.8  特性 276

10.9  另一观点 278

10.10  本章小结 279

10.11  测试用例 279

第11章  嵌套循环 281

11.1  基本机制 282

11.2  实际示例 286

11.3  完备性检查 287

11.4  本章小结 291

11.5  测试用例 291

第12章  散列连接 293

12.1  入门 294

12.1.1  最优散列连接 297

12.1.2  一遍散列连接 299

12.1.3  多遍散列连接 304

12.2  追踪文件 308

12.2.1  event 10104 308

12.2.2  event 10053 309

12.3  难点 311

12.3.1  传统成本计算 311

12.3.2  现代成本计算 312

12.4  比较 313

12.5  多表连接 318

12.6  本章小结 321

12.7  测试用例 321

第13章  排序与归并连接 323

13.1  入门 324

13.1.1  内存的使用 329

13.1.2  CPU的使用 330

13.1.3  sort_area_retained_size 333

13.1.4  pga_aggregate_target 334

13.1.5  实际I/O 337

13.2  排序的成本 339

13.3  比较 343

13.4  归并连接 346

13.4.1  归并机制 347

13.4.2  无最初排序的归并连接 351

13.4.3  笛卡尔归并连接 352

13.5  聚集及其他 354

13.5.1  索引 358

13.5.2  集合运算 359

13.6  最后一次提醒 363

13.7  本章小结 365

13.8  测试用例 366

第14章  10053 trace文件 367

14.1  查询 368

14.2  执行计划 369

14.3  环境 370

14.4  追踪文件 371

14.4.1  参数设置 372

14.4.2  查询块 375

14.4.3  存储统计信息 376

14.4.4  单表 378

14.4.5  完备性检查 379

14.4.6  一般计划 380

14.4.7  Join order[1] 380

14.4.8  Join order[2] 386

14.4.9  Join order[3] 387

14.4.10  Join order[4] 388

14.4.11  Join order[5] 388

14.4.12  Join order[6] 392

14.4.13  Join order[7] 392

14.4.14  Join order[8] 395

14.4.15  Join order[9] 397

14.4.16  Join order[10] 398

14.4.17  Join order[11] 398

14.4.18  Join order[12] 401

14.4.19  Join order[13] 404

14.4.20  Join order[14] 405

14.4.21  Join order[15] 406

14.4.22  Join order[16] 407

14.4.23  Join order[17] 407

14.4.24  Join order[18] 409

14.5  连接评估小结 410

14.6  测试用例 413

附录A  升级问题 415

A.1  dbms_stats 416

A.2  频率直方图 417

A.3  CPU成本计算 417

A.4  舍入误差 417

A.5  绑定变量窥视 418

A.6  连接间的空值 418

A.7  B树到位图的转换 418

A.8  索引跳跃扫描 419

A.9  AND-Equal 419

A.10  索引散列连接 420

A.11  修正的In-List 420

A.12  传递闭包 420

A.13  sysdate算术修正 421

A.14  对空值的索引 422

A.15  pga_aggregate_target 422

A.16  排序 422

A.17  分组 423

A.18  完备性检查 423

A.19  超出界限的情况 423

A.20  关于类型 423

A.21  optimizer_mode 424

A.22  降序索引 424

A.23  复杂视图合并 424

A.24  非嵌套子查询 424

A.25  标量和过滤子查询 425

A.26  并行查询策略的两次变化 425

A.27  动态采样 425

A.28  临时表 425

A.29  字典统计 426

附录B  优化器参数 427

B.1  optimizer_features_enable 428

B.2  10053 trace文件 430

B.3  v$sql_optimizer_env 435

  

 

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个