Oracle Database 11gR2 性能调整与优化
[美] Richard Niemiec 著
杨中 朱波 吕学勇 译
北 京
Richard Niemiec Oracle Database 11g Release 2 Performance Tuning Tips & Techniques ISBN:978-0-07-178026-1 Copyright © 2012 by McGraw-Hill Education. All Rights reserved. No part of this publication may be reproduced or transmitted in any form or by any means, electronic or mechanical, including without limitation photocopying, recording, taping, or any database, information or retrieval system, without the prior written permission of the publisher. This authorized Chinese translation edition is jointly published by McGraw-Hill Education (Asia) and Tsinghua University Press Limited. This edition is authorized for sale in the People’s Republic of China only, excluding Hong Kong, Macao SAR and Taiwan. Copyright © 2013 by McGraw-Hill Education (Asia) and Tsinghua University Press Limited. 版权所有。未经出版人事先书面许可,对本出版物的任何部分不得以任何方式或途径复制或传播,包括但不限于 复印、录制、录音,或通过任何数据库、信息或可检索的系统。 本授权中文简体字翻译版由麦格劳-希尔(亚洲)教育出版公司和清华大学出版社有限公司合作出版。此版本经授权 仅限在中华人民共和国境内(不包括香港特别行政区、澳门特别行政区和台湾)销售。 版权©2013 由麦格劳-希尔(亚洲)教育出版公司与清华大学出版社有限公司所有。 北京市版权局著作权合同登记号 图字:01-2012-3835 本书封面贴有 McGraw-Hill Education 公司防伪标签,无标签者不得销售。 版权所有,侵权必究。侵权举报电话:010-62782989 13701121933
图书在版编目(CIP)数据 Oracle Database 11gR2 性能调整与优化/(美)尼米克(Niemiec,R.) 著;杨中,朱波,吕学勇 译. —北京:清华大学出版社,2014 书名原文:Oracle Database 11g Release 2 Performance Tuning Tips & Techniques ISBN 978-7-302-33905-2 I. ①O… Ⅱ . ①尼… ②杨… ③朱… ④吕… Ⅲ. ①关系数据库系统 Ⅳ. ①TP311.138 中国版本图书馆 CIP 数据核字(2013)第 217394 号
责任编辑:王 军 李维杰 封面设计:牛艳敏 责任校对:曹 阳 责任印制:
出版发行:清华大学出版社 网 址:http://www.tup.com.cn,http://www.wqbook.com 地 址:北京清华大学学研大厦 A 座 邮 编:100084 社 总 机:010-62770175 邮 购:010-62786544 投稿与读者服务:010-62776969,[email protected] 质 量 反 馈:010-62772015,[email protected] 装 订 者: 经 销:全国新华书店 开 本:185mm×260mm 印 张:65.75 字 数:1812 千字 版 次:2014 年 1 月第 1 版 印 次:2014 年 1 月第 1 次印刷 印 数:1~4000 定 价:128.00 元 ——————————————————————————————————————————— 产品编号:
中文版推荐序
理查德·尼米克的书《Oracle Database 性能调整与优化》在国际 Oracle 业界享誉多年,现在清 华大学出版社推出了该书最新版本(11gR2)的中译本。译者都是来自 Oracle 公司的技术专家,群英 荟萃,各显其能;译文信、达、雅齐备,精彩纷呈。汉语读者会感觉很惬意,再也不必去啃原文了。 我和理查德是美国普度大学的校友。我 1986 年毕业于计算机科学系,他 1987 年毕业于电机 与计算机工程系。在美国,普度大学常被誉为“工程师的摇篮”,凡是有工程师的地方都少不了普 度人的身影。人类第一个踏上月球的尼尔·阿姆斯特朗、中国的“两弹一星”元勋邓稼先就都毕 业于普度。 从普度大学毕业后,我去贝尔实验室就职,来到了芝加哥;而理查德本来就是芝加哥人,毕 业后回家乡创办了终极软件资讯公司(TUSC),专门提供 Oracle 业务解决方案。那段时间里,我正 负责主持旅美中国科学家工程师协会、北京大学美中地区校友会的活动,和各类企业、团体打交 道比较多,知道理查德的公司被业界誉为“Oracle 领域的海豹突击队”,是一支为很多企业用户解 决了难题的攻坚队伍。凭借娴熟的技术和对商务的敏锐直觉,他带领着 TUSC 很快地跻身于 Inc. 500 强之列。Inc. 500 强和人们更为熟知的财富(Fortune)500 强不太一样。Fortune 和 Inc.都是美国 最主要的商务杂志,但侧重点却不同:Fortune 着眼于巨型跨国公司,Inc.则面向成长中的私营企 业。所以,Fortune 500 强排名看的是营业额,而 Inc. 500 强看的则是增长速度;在 Inc. 500 强中 企业家个人所发挥的作用更为举足轻重。TUSC 不仅成了 Oracle 的合作伙伴,理查德本人还荣任 了国际 Oracle 用户协会的会长。2007 年,母校普度大学给理查德颁发了“杰出电机与计算机工程 师奖”。这是普度每年只颁发给五、六名杰出校友的荣誉,曾获此殊荣的华人包括中国工程院院士、 中科院计算所前所长李国杰,以及为第四代移动通信核心技术做出了重大贡献的高通公司副总裁 厉隽怿。 理查德一向重视“品格”,强调品格和创新、才能、知识一样,是把企业在业务和技术两方 面都引向成功的关键因素。没有品格就好像没有灵魂。很多技术专家创新、才能、知识俱备,唯 独忽略了品格,以致难成大器。以他的见识,理查德把优秀的品格归纳为:诚信、自制、主动、 无私、热情、道德勇气、生理勇气、坚忍不拔和灵活变通等多重维度。这些名词,皆为大家所熟 知,然而知易行难。理查德结合杰出人物的生活经历深入分析品格的重要,使这部分内容成了美 国 Oracle 用户大会上最受欢迎和重视的主题之一。在为本书中文版所写的序言里,他历数中华历 史先贤,并以西方的品格标准衡量这些先贤的言行,结果是人同此心,心同此理:按西方的价值 观和品格观来评判,中华先贤同样是了不起的。理查德的话激励我们,要像中华历史先贤那样重 视和发展品格,即使是作为一名普通的数据库工程技术人员也绝不例外。只有这样,我们赶超世 界最先进水平的努力才不会徒劳无功。 技术,一般说来都有两个层面:有人工智能可以取代的,也有人工智能取代不了的。后者与 其说是技术,不如说更像是一种艺术。这就是当我们谈论知识产权时,为什么把已有的技术称作 Prior Art 的原因;而要说明某产品具备了最新技术时,我们用 State-of-the-Art 这个词来描述它。 很多厂商把自家的产品标榜为 Turn-Key System,意思是用钥匙一拧就好使,用户大可不必操心如 何安装使用。而像数据库这样的复杂系统,Turn-Key 其实是不可能的,调优势在必行,而且无法 用人工智能完全取代。既然是艺术层面的技术,大师和工匠之间就有着天壤之别了。作为一代
II Oracle Database 11gR2 性能调整与优化
Oracle 调优大师,理查德的经验是其他书籍不可替代的。他在绪言中说“如果通读全书并应用其 内容,您将跻身于最顶尖 1% Oracle 调优专家的行列。”这好像是个充分条件。我来补充一句必要 条件吧:如果您想跻身于最顶尖 1% Oracle 调优专家的行列,那就得通读全书,领悟其精髓,并 应用到您的工作实践中去。
阮祖望 原摩托罗拉网络系统部中国研发中心总工程师 北京大学软件与微电子学院教授
中 文 版 序
不久前我走访了中国,到 2013 年 7 月于上海举行 的 Oracle 全球大会上演讲,还在珠海及上海的很多公 司里做了演说。几年前我就在北京、上海和杭州做过 演说。我体会最多的一点乃是中国的很多公司里都有 Oracle 方面的领路人,通过在大银行、证券交易所、 电信业、电子商务业、物流业、制造业和我所见到的 许多其他行业里运用 Oracle 的最佳技术,这些领路人 正在将亚洲推向加速发展和令人振奋的未来。他们成 功的秘诀乃是以训练有素的 Oracle 技术专家来应用 Oracle 的技术,而在业务和技术两方面都不断成功的关键乃是将创新、才能、知识和品格四者融 为一体。很多出色的技术专家具备了其中的前三者,却忘记了发展这第四者。而正是品格促动了 持久的变更,这些变更使所有人都能受益,而不仅仅是使少数人受益。在 Oracle 内部我看到了很 多这样的领路人,与此同时我看到很多管理人员、DBA 和开发人员利用 Oracle 的技术来为他们 自己的公司创造业务优势,我还看到用户组领路有方,教会人们使用数据库一体机、Oracle Database 12c、Oracle 融合中间件及融合应用,等等。 中国历史上,展现伟大品格的故事和真实人物比比皆是。孔夫子曰:“君子谋道不谋食。”蔺 相如所展示的,不仅有完璧归赵的诚信,还有原谅廉颇的道义上的勇气。感觉岁月艰难的时候, 我们可以来看看苏武的生理之 勇:他宁肯以皮衣上的羊毛、 草、雪和鼠类充饥,也不肯向 敌人屈服。我们可以看到花木 兰将军的自我控制力及她对父 亲的极度尊重。刘备热心招募 关羽和张飞的远见令人叹服, 聘请大战略家诸葛亮时他也领 导有度。孙子的用兵原则举世 闻名,他同时还阐明了力量来 源于智慧、人道、诚信和纪律。 来自芝加哥大学的李政道生于上海,在我的老家芝加哥,大家都知道这位诺贝尔奖金获得者的学 识。诸葛亮作为战略大师的智慧有口皆碑,而他又因睿智、冷静、忠心和富于革新精神而著称于 世。在杭州,李清照对其亡夫的敬重为世人所共知1,她也因自己的诗词大作而闻名于世。我们都 希望具有如赵云一般的忠实,他不仅重返敌阵救出过刘备的家人,也重返敌阵救出过张著2。赵云 一次次地向我们展现了品格的魅力。孔融 4 岁时就表现出无私的品质,把最大的梨让给了哥哥。
1 译者注:赵明诚和李清照夫妻恩爱,才子佳人。赵亡故于金兵战乱之中后,李历尽艰辛来到杭州,整理、完成和出版了赵的 《金石录》遗稿,使他名垂青史。 2 译者注:张著是蜀汉的普通部将。
IV Oracle Database 11gR2 性能调整与优化
他会因机智而闻名,亦将非常成功。请求蔺相如宽 恕的时候,廉颇这样了不起的将军表现出了谦恭和 有深度的品格。若像这些各界的领路人一样发展品 格,则技术知识将与品格相辅相成,使我们所做的 一切产生持久的影响。这种有深度的品格造就了挺 过严峻考验、坚持到胜利的韧劲,正像孙中山医生3 在战胜挑战、使自己成为中国的共和之父及首任总统时所表现出来的坚韧不拔的精神那样。他的 话:“四海一家”表明他预见到了未来实现全人类伟大目标时全球范围内的大团结。坚韧乃心灵之 力量,使您能够借助勇气和品格来挺过痛苦和逆境。努力构建自己品格的时候,应时时扪心自问: 倘若这些领路人们置身于您所面对的挑战之中,他 们又将如何作为呢?于是您就能够像他们那样在生 活中胜出了。 清华大学出版社在中国出版界独占鳌头,由他 们来做出版商,我十分感谢并感到非常荣幸。我要 感谢那些将我的技术著作翻译成汉语的人们,因为 有了他们的帮助我才能成功和胜出。若非他们出色 的技术能力及品格,您可能就读不到这部书了,所 以他们的确是送了份大礼给您!我要感谢吕学勇,他在此项工程中发挥了非常重要的作用。事实 上,正是学勇邀我出面来华演讲,并借此来对他的国家产生影响的。他是很具才干的 Oracle 专家, 还是位做任何事情时都充分体现出品格魅力的绝佳领路人。学勇翻译了本书中的好几章。我还要 感谢这绝佳的翻译团队。在中国,杨中是位出色的领路人,也是您所能遇到的最聪明的 Oracle 技 术权威之一;朱波是卓越的技术专家,也是极好的而又富于热情的人。杨中和朱波也翻译了书中 的很多章。黄凯耀、董志平和李贺鑫在本书的翻译上也花了时间,使得您能在最高的层面上欣赏 和学习 Oracle。见到他们时,别忘了感谢这些 Oracle 的领路人啊! 在中国,我有幸遇到了很多友善的人。 Oracle 全球大会上,有人帮助我找到了分 会场,也有人感谢我来分享技术题材。即 便是周末去天主教堂的时候,我也同样受 到了基督徒伙伴们热情的接待。我由衷地 感觉在中国所做的一切都受到欢迎,而这 或许正是中国将持续地与世界分享的伟大 之处吧!中国了不起的传奇和领路人不仅 使它自己获益,而且使全世界都获益。我 们在一起将能成就许多大事!!
3 译者注:孙中山早年毕业于香港的西医书院,并为贫穷的病人义诊,因此被尊称为孙中山医生。
Preface for Chinese Readers
I recently traveled to China to speak in Shanghai at Oracle OpenWorld in July 2013. I also spoke in Zhuhai and at many companies in Shanghai. A few years back I spoke in Beijing, Shanghai, and Hangzhou as well. What I learned most while I was there is that China has many Oracle leaders at many companies. These leaders are driving Asia to an accelerating and exciting future by implementing the best Oracle technology at the biggest banks, stock exchanges, telecom, internet shopping, logistics companies, manufacturing, and many others that I saw while I was there. Their secret to success was implementing Oracle technology with highly trained Oracle technologists. The key to sustained success in both business and technology is the combination of innovation, talent, knowledge, and character. Many great technologists have the first three, but forget to also develop the fourth. Character is what drives lasting change that helps everyone, not just a select few. I saw many such leaders within Oracle while I saw many executives, DBAs, and developers leveraging Oracle technology to create business advantages for their company. I also saw great user group leadership teaching others to leverage things like Exadata, Oracle 12c Database, and Oracle Fusion Middeware and Fusion Applications.
China’s history is full of stories and actual leaders that show great character. Confucius tells us “The object of the superior person is truth, not subsistence.” What Lin Xiangru shows is not only his integrity in returning the jade, but also his moral courage in forgiving Lian Po. When we think times are tough for us, we can look to the physical courage of Su Wu, who would not surrender and instead ate wool from his coat, grass, snow, and rodents. We see the self control of General Hua Mu‐Lan as well as her incredible respect for her father. The enthusiasm of Liu Bei is admirable as his foresight in recruiting
VI Oracle Database 11gR2 性能调整与优化
Guan Yu and Zhang Fei. Liu Bei also shows his leadership in recruiting a great strategist Zhuge Liang. Master Sun Tzu not only shows us principles for using force that are known around the world, but also shows that strength comes from wisdom, humanity, integrity, courage, and discipline. Even in my home city of Chicago we know the knowledge of the noble prize winner from the University of Chicago, Li Zheng‐Dao, who was born in Shanghai. The wisdom of Zhuge Liang as a master strategist is legendary, but he is also known as wise, calm, loyal, and innovative. Li Qingzhao’s respect for her husband after he died makes her well‐known in Hangzhou, but she is also known for her great poetry. We would all like to have the loyalty of Zhao Yun where he not only goes back for Liu Bei’s family, but also for Zhang Zhu. Zhao Yun shows us that character is displayed over and over again. The unselfishness of Kong Rong is evident even at four years old where he gives the largest pears to his older brothers. Later he would become known for his wit and would become very successful. The humility of even a great warrior like Lian Po in asking forgiveness from Lin Xiangru shows the depth of his character. When we develop the character as each of these leaders did in each area, we will complement our technical knowledge with character and make a lasting impact in everything that we do. We can see that this depth of character leads to great fortitude to excel during great challenges as Dr. Sun Zhong Shan did to help himself becoming Father of China and its first President. His quote: “The whole world is one family” shows that he saw a global solidarity in the future to achieve greater goals for all humanity. Fortitude is the strength of mind that allows you to endure pain or adversity with courage and character. You should always strive to build your character by asking what these leaders would do if they were in your day to day challenges, and then you will be able to excel in life as each of them did.
Tsinghua University Press is the best in China and I am very grateful and honored to have them be the publisher. I must thank those who have helped me to succeed and excel by translating my technical work into Chinese. You would not be reading this book if it was not
VII for their great technical ability as well as their character. They have given you a great gift indeed! I would like to thank Steven Lu who played a very important role in this project. In fact Steven is the one who asks me to come out and make an impact in China by presenting in his country. He is a talented Oracle professional, but also a wonderful leader overflowing with character in everything he does. Steven translated several chapters of the book. I would also like to thank the incredible team. Steven Yang is a great leader in China and one of the smartest Oracle gurus you’ll ever meet; Ricky Zhu is a great technologist, but also a wonderful and enthusiastic person to be around. Steven and Ricky also translated many chapters in the book. Kaya Huang, Cary Dong, and Harrison Li were the others that put in the time so that you could enjoy and learn Oracle to the highest level. Thank all of these Oracle leaders when you see them!
I am blessed to have met so many great people in China. At the Oracle OpenWorld conference, there were people helping me to sessions, thanking me for coming, and sharing technology stories. Even on the weekend, I went to the catholic church while I was in China and again was met with open arms by fellow Christians. I truly felt welcomed in everything that I did in China and this may be the true greatness that China will continue to share with the world. The great stories and leaders of China not only benefit China, but the whole world. Together we can & will do great things!!
译 者 序
理查德·尼米克(Rich Niemiec)是蜚声国际数据库界的性能优化大师。2005 年,他的技术文章 “Statspack 高级调优”被译成汉语引入中国,深受国内 Oracle 数据库 DBA 和应用程序开发人员 的欢迎。2007 年和 2013 年,他作为 Oracle 全球大会的演讲嘉宾两次来到上海,并在北京、上海、 杭州和珠海等地为很多 Oracle 的重要客户举办了技术讲座,在中国的 Oracle 业界产生了十分积极 的影响。 《Oracle Database 性能调整与优化》一书是理查德的代表作,多年来畅销于北美,在中国也 有 9i 和 10g 版的汉语译本出版发行。11g 是 Oracle 数据库十分重要的版本,因为具有划时代意义 的 Exadata 数据库一体机迄今只能运行在 11g 版本的环境下。在《Oracle Database 性能调整与优化》 的 11gR2 版本中,理查德介绍了 Exadata 数据库一体机,也介绍了活动数据卫士(Active Data Guard, ADG)、真正应用测试(Real Application Testing,RAT)等 11g 版本新选件,还介绍了只读表(Read Only Table)、不可视索引(Invisible Index)、结果集缓存(Result Cache)等 11g 版本新特性。 了解 Oracle 11g 版本的新内容、掌握数据库的优化方法并且在 11g 版本的环境下对其灵活运 用,这些都是中国 Oracle 数据库用户和工程技术人员的迫切需求。而理查德 11gR2 版本的《Oracle Database 性能调整与优化》,既可以用作介绍 11g 版本新产品和新特性的大纲,又可以用作数据库 性能优化的教科书;因为含有大量成熟的脚本,该书还是非常实用的 DBA 日常工作手册。一书 多用,这对于上述有需求的群体来说,无疑是极好的选择。不过这样一部巨著的汉语翻译工作, 绝非仅凭一人之力即可完成的任务。为了向国内读者及时提供高质量的译本,我们几名来自 Oracle 公司的专业技术人员组成了一个翻译小组,利用工作之余的时间努力攻关。杨中、朱波、吕学勇 完成了其中的大部分工作: 杨中:本次翻译活动的倡议者和联络人,翻译了第 2、4、8、9、11 章并和朱波合作翻译了第 15 章;翻译了附录 A 并帮助李贺鑫翻译了附录 B 和 C。 朱波:翻译了第 1、3、5、6、10 章并和杨中合作翻译了第 15 章。 吕学勇:翻译了中文版序、作者简介、来自全球的赞誉、绪言、致丽贾娜、致谢、技术审校 者介绍、第 7、12、16 章和封底,还帮助分析、翻译了全书各章中的疑难句子。 此外,黄凯耀翻译了第 14 章,董志平翻译了第 13 章,李贺鑫帮助翻译了附录 B 和 C。 此书的翻译过程中,翻译小组先读者之忧而忧,不放过任何一处疑点,常常为了把一条命令 或一个参数彻底搞清楚而去查阅资料,与其他专家讨论,甚至和书的原作者越洋商讨。我们在测 试环境下运行了原著中很多解释得不够清楚的脚本,并对运行结果进行了认真的分析和比对。由 于中西方文化的差异,原著中的一些内容可能使读者感到困惑,另外还有不少地方表述得模糊。 对于这些,我们都尽可能地加了译者注。而对于发现的错误、不当之处或有争议之处,我们也大 多同原作者进行过沟通,并尽力在译文中做了修正。 非常感谢理查德为此中文版写下了热情洋溢的序。他在美国普度大学读书时的校友,原摩托 罗拉网络系统部中国研发中心总工程师、北京大学软件与微电子学院的阮祖望教授也为此译本写 了推荐序。阮教授的序能让我们了解理查德的工作,也能让大家充分认识数据库性能调整与优化 的重要性。 感谢清华大学出版社的王军编辑,他在此书编辑过程中所表现出来的热心、耐心和敬业精神
X Oracle Database 11gR2 性能调整与优化
令我们十分感动;李维杰编辑则做了大量具体的文稿处理工作。同他们合作,让人非常愉快! 陈长青、陈伟林、韩南、黄小满和刘亦龙等 Oracle 公司的同事,分别对书中的技术内容发表 过他们的专家意见,为本书的翻译贡献了力量。 在翻译过程中所遇到的涉及西方生活和思想的问题,也困扰了我们整个翻译组。Jay Edwards 和他的太太 Nancy Edwards,还有 Mary Dopart 女士,对我们的问题做了不厌其烦的解答。另外几 位来自美国和加拿大的朋友也在这方面出了力,只是他们来去匆匆,想记下他们的名字来都未能 如愿。在此我们由衷地感谢这些北美朋友的帮助! 翻译组的每个成员都深深地感谢我们的家人,他们陪伴我们走过了一段辛苦的历程。没有他 们的理解与支持,本次翻译工作的成果是难以设想的。 理查德为我们的中译本作序时提起了赵云,称赞他“不仅重返敌阵救出了刘备的家人,也重 返敌阵救出了张著。”国人几乎没有不知道赵云和刘备大名的,来自大洋彼岸的理查德不仅知道他 们,竟然还知道张著获救,他的博学、博爱及对中国的关注由此可见一斑。翻开史籍,其实张著 也是位勇敢的将军,只是名气没那么大、欠了些磨砺而已。开疆拓土和御敌护国固然都少不得赵 云那样浑身是胆的常胜将军,但更少不得一批像张著那样奋不顾身的中坚力量。广大的中国 Oracle 用户群,普遍依靠的正是“张著”这类敢打敢拼而大有潜力的青年将军,所以应该特别重视他们、 重视对他们的锻炼和培养。如果今天的张著读过理查德数据库性能优化的书后受到启发,且自强 不息,最终成长为赵云一样的大英雄,我们翻译组就可以开心地后读者之乐而乐了。
来自全球的赞誉
''Rich continues to be one of the foremost authorities on tuning the Oracle Database. His collection of tuning tips and tricks is a must-have for any database professional. '' —Judy Sim, Chief Marketing Officer, Oracle
“理查德一直都是数据库性能调优领域中最杰出的权威之一,他所收集的调优技巧和诀窍是 数据库专业人员务必要掌握的。” —Judy Sim,Oracle 首席营销官
''Another 'must have' technical reference for the Oracle professional. Rich's books provide invaluable insight that allows you to get the most out of Oracle and push it to the limit and beyond. '' —Matt Swann, Vice President of Software Development, Amazon.com
“这部新书是 Oracle 专业人士所必备的技术参考手册。理查德的书提供了无价的洞察力,使 您能从 Oracle 中获取最大的收益,并把获取到的东西发挥到极限乃至超限。” —Matt Swann,亚马逊软件开发副总裁
''This is a timely update of Rich's classic book on Oracle Database performance tuning to cover hot new topics like Database 11g Release 2 and Exadata. This is a must-have for DBAs moving to these new products. '' —Andrew Mendelsohn, Senior Vice President, Oracle Database Server Technologies
“这是对理查德 Oracle 数据库性能优化之经典著作的及时更新,以涉及诸如 11gR2 版数据库 和 Exadata 等最新的热门课题。此书是行将使用这些新产品的 DBA 们所必备的。” —Andrew Mendelsohn,Oracle 数据库服务器高级副总裁
XII Oracle Database 11gR2 性能调整与优化
''Packed with tips and tuning tricks, Rich draws from a lifetime of Oracle experience. This book is essential reading for every Oracle DBA who wants to stay current with the nuances of Oracle Database performance tuning. '' —Sohan DeMel, Vice President of Product Strategy, Oracle Corporation
“这本书汲取了理查德毕生的 Oracle 经验,充满了各种调优的技巧和诀窍。对于每个力求对 Oracle 数据库性能优化领域里任何变化都了如指掌的 DBA 而言,此书是他不可或缺的读物。” —Sohan DeMel,Oracle 公司产品战略副总裁
''Rich makes most complex concepts in Oracle simple and interesting. His deep passion to educate everybody is unique in all his books. I remember 12 years back when I started learning Oracle reading Rich Niemiec books, and even today I consider his books the most reliable source in decision making. No DBA library in this world is complete without Rich Niemiec books. '' —Shiv Iyer, Founder & CEO, Ask DB Experts, Bangalore, India
“理查德把 Oracle 中最复杂的概念变得简单而有趣,他的著作里有一种深切和独特的诲人不 倦的热情。12 年前初学 Oracle 的时候读到了他的书,而今我依然把他的书作为决策时最为可靠的 依据。如果天下哪个 DBA 文库里少了理查德·尼米克的著作,那它就不是个完备的文库。” —Shiv Iyer,印度班加罗尔 Ask DB Experts 公司创始人兼首席执行官
''When I was a junior DBA in Chicago sixteen years ago, Rich Niemiec's brilliant and unique DBA/developer topics exposed me to the wonderful world of performance tuning. In today’s era of Oracle Exadata when hardware and software are engineered to work together, I found Rich still at the forefront of this technology. '' —Steven Xueyong Lu, iTech Consultant Lead, Oracle China
“16 年前的我还是芝加哥城里一个初出茅庐的 DBA,理查德·尼米克才华横溢、独一无二 的 DBA/developer 讲义展现在我眼前的却是一片性能优化的神奇天地。如今已是 Oracle Exadata 软硬件一体机的时代了,而我发现理查德依然走在这门技术的最前沿。” —吕学勇,Oracle 中国区 iTech 顾问经理
''Tuning Oracle Databases is a science. When I need to have an answer to any tuning issue, I always turn to Rich's Oracle Tuning Books. Whether it is 9i, 10g, or 11g, I know I can find the correct solution to the problem. '' —Stan Novinsky, Senior Oracle DBA/VMware Engineer, the Johns Hopkins University Applied Physics Laboratory
“Oracle 数据库调优是一门科学。每当需要针对调优问题给出答案时,我都会求助于理查德 的 Oracle 性能优化的书。无论是 9i、10g 还是 11g 的问题,我都确信可以从中找到正解。”
—Stan Novinsky,约翰·霍普金斯大学应用物理实验室高级 DBA/VMware 工程师
来自全球的赞誉 XIII
''To every difficult problem exists a simple solution; this is what I’ve learned from Rich's books'' —Ghazi Ben Youssef, MBA, Senior Oracle DBA, Sogique, Canada
“针对每个困难的问题都有一个单纯的答案,这是我从理查德的书中了解到的。”
—Ghazi Ben Youssef,加拿大 Sogique 公司工商管理硕士、高级 Oracle DBA
''If you could buy only one book on Oracle 11gR2 this is the one to have in your DBA arsenal. If it's not on your shelf, consider yourself unarmed. Rich does an excellent job of piecing the puzzle of performance tuning in an easy to follow outline. '' —Jerry D. Robinson Jr., Sr. DBA, Northrop Grumman
“如果您只能买一本 Oracle 11gR2 方面的书,那么就应该把这本书填充进您的 DBA 武器库 里。书架上缺了这本书,就自认是手无寸铁吧!理查德干得漂亮:按照一份不难遵循的纲要,拼 出了一幅性能优化的拼图。” —Jerry D. Robinson Jr.,Northrop Grumman 公司高级 DBA
''I admire Rich for his knowledge on Oracle Technology. This book from him is another masterpiece useful for anyone who would like to excel in Oracle Performance Tuning. The book encompasses Rich's rich Oracle expertise and experience and is a must read for all Oraclelites. '' —Hardik Bhatt, Chief Information Officer, City of Chicago
“我很佩服理查德在 Oracle 技术方面的知识,他的这部书是对那些想在 Oracle 性能优化领域 里出头的人十分有助的又一力作。这部书包含了理查德丰富的 Oracle 知识和经验,是所有‘Oracle 籍’人所必读的。” —Hardik Bhatt,芝加哥市政府首席信息官
''If you need the best tuning DBA: call Rich Niemiec! Or get his Oracle tuning book'' —Julian Dontcheff, Senior Oracle Database Administrator, Nokia Corporation, Finland
“如果您急需最好的性能调优 DBA,那就去找理查德·尼米克好了!或是搞一本他性能调优 的书。” —Julian Dontcheff,芬兰诺基亚公司高级 Oracle 数据库管理员
''There is nothing more rewarding than to see someone from your family succeeds in life. Rich being from our Purdue Upward Bound Family has brought much pride to us with not only with his expert Oracle technology knowledge but also with his caring attitude and dedication to help others! '' —Joseph Flores, Director Upward Bound, Purdue University Calumet
“没有比看到自家人在生活中获得成功更让人满足的事情了。理查德作为普度大学低收入家 庭学生向上助学金获得者大家庭里的一员,不仅仅因为专家级的 Oracle 技术知识,更因为关心他 人的态度和帮助他人的奉献精神而使我们为他深感自豪!”
—Joseph Flores,普度大学盖莱默校区向上助学金主任
XIV Oracle Database 11gR2 性能调整与优化
''Rich Niemiec is a phenomenal entrepreneur with incredible depth of knowledge regarding Oracle applications. '' —Prof. Gerald Hills, Coleman Chair of Entrepreneurship, University of Illinois at Chicago
“理查德·尼米克是不同寻常的企业家,他在 Oracle 应用程序方面的知识深度让人惊羡。”
—Gerald Hills,美国伊利诺大学芝加哥校区教授,科尔曼企业家主席
''We have learned much from Rich. '' —Nguyen Hoang, Information Expert, Ministry of Finance, Viet Nam “我们从理查德处获益匪浅。” —Nguyen Hoang,越南财政部信息专家
''Rich Niemiec had the courage to make his dreams come true. Through hard work and determination he overcame obstacles and serves as a role model for all students in TRiO Pre-College Programs. His knowledge and passion go beyond computers; he seeks to inspire others to have the courage to make their dreams come true too! '' —Bobbi Jo Johnson, Upward Bound Advisor, UW-Sheboygan
“理查德·尼米克有使梦想成真的勇气,他以刻苦的工作和坚定的信念克服障碍,为所有领 取低收入家庭助学金的大学预科生树立了榜样。他的知识和热情超越了电脑,他力求在他人身上 也激发出使梦想成真的勇气来。” —Bobbi Jo Johnson,美国威斯康星大学希博伊根分校向上助学金顾问
''The best Oracle Tuning book that I ever read is from Rich Niemiec and I would recommend his book to anyone who needs a better understanding about performance tuning and to enhance their skills in Oracle. '' —Shaharidan Karim, Sr DBA, Commerce Dot Com Sdn Bhd, Malaysia
“Oracle 性能优化方面,我所见过的最好的书籍就是理查德·尼米克的大作了,我要把他的 书推荐给所有打算对性能优化作更深入了解、提高自己 Oracle 技能的人们。” —Shaharidan Karim,马来西亚商务部 Dot Com 私人有限公司高级 DBA
''Rich's boundless passion for technology combined with his zeal to share provides him the unique advantage to create a profound product that is rich in every way—he provides an insider's view that you cannot afford to miss. '' —Anil Khilani, Global Technical Lead, Oracle Corporation
“对技术的无限激情和对分享的热诚给了理查德以独特的优势:他创造的产品在各方面都是 丰富多样的。他是了解内幕的人,他的意见您忽略不起啊!” —Anil Khilani,Oracle 公司全球技术组长
来自全球的赞誉 XV
''Back in the time before MetaLink when Oracle Support was measured in hold time and pounds of manuals, I was lost in the darkness between unrealistic expectations and unreasonable demands. And then there was Rich. Years later, Rich is still a beacon whose insights light the path to my own discovery. '' —Fran Koerner LAOUG Treasurer, DIRECTV, Oracle DBA
“回想起 MetaLink 之前的时代,Oracle 技术支持是以保存时间和成磅重的手册来计量的,我 迷失在不切实际的期望和不合理的要求之间的一片黑暗之中了。这时理查德出现了。多年后,理 查德仍然是一盏明灯,其洞察力照亮了我的自我发现之路。” —Fran Koerner LAOUG Treasurer,DIRECTV,Oracle DBA
''Developers take note: Tuning is not just for DBAs. The proven techniques Rich explains in this book will help you create the most efficient application possible. Every developer who works with the Oracle database should own and read this book. '' —Peter Koletzke, Quovera
“开发人员请注意:优化不仅仅是 DBA 的事!理查德在本书中讲解的成熟技术将帮助您创 建最有效的应用程序,每个使用 Oracle 数据库的开发人员都应该拥有此书并熟读它。” —Peter Koletzke,Quovera 公司
''Michelangelo tells us that our problem is not aiming too high and missing but in aiming too low and hitting every time. With a master like Rich on your bookshelf, you can aim high with confidence. '' —Ronan Miles, British Telecommunications, London
“米开朗基罗告诫说:我们的问题并非目标太高、高不可攀,而是目标太低,唾手可得。如 果书架上有理查德这等高手的书,您就可以去信心满满地制定高目标了。” —Ronan Miles,伦敦英国电信
''Rich Niemiec's record as an expert speaks for itself. His diverse and extensive skills in Oracle technology with infinite possibilities, impacts various aspects of life's application. '' —Albert Nashon Odhoji, Project Coordinator, THE SLUMCODE GROUP, Nairobi, Kenya
“理查德·尼米克的专家记录说明着一切。他在具有无限可能性的 Oracle 技术方面的多样、 广泛的技能,影响着实际生活的方方面面。” —Albert Nashon Odhoji,肯尼亚内罗毕 SLUMCODE 集团项目协调员
''Rich doesn't just know Oracle—he is THE Oracle! '' —Dennis Remmer, MD, E2 Australia, National President, Australian Oracle User Group (AUSOUG) “理查德不仅仅了解 Oracle,他就是全部的 Oracle!” —Dennis Remmer,澳大利亚 Oracle 用户组(AUSOUG)主席
XVI Oracle Database 11gR2 性能调整与优化
''Rich is not only a subject matter expert with Oracle technologies, he is also an outstanding author and friend. He consistently contributes his time, knowledge, and professional experience with the Oracle user community by introducing new features or helping others in need of support. Its individuals like Rich who truly make an impact for the greater good in the Oracle community. '' —Richard Stroupe, President, TRS Consulting Inc., Co-author Oracle Database 10g Insider Solutions “理查德不仅仅是 Oracle 技术方面的论题专家,他还是杰出的作家和朋友。他持之以恒地将 自己的时间、知识和专业经验奉献给 Oracle 用户社区,介绍新功能或者帮助那些需要支持的人。 正是像理查德这样的人,对 Oracle 社区的“大我”发挥着实实在在的影响。” —Richard Stroupe,TRS 咨询公司主席,Oracle Database 10g Insider Solutions 合著者
''The knowledge and skills from Mr. Niemiec are an unique experience within tuning issues. '' —Filipe Texeira de Souza, Systems Manager, Rio de Janeiro City Hall’s Secretary of Education, Brazil “从尼米克先生处获得的知识和技能是性能调优方面独到的经验。” —Filipe Texeira de Souza,巴西里约热内卢市政府教育统筹局局长、系统经理
''Rich is a true expert in Oracle tuning. He not only masters the theory and tools, but is also able to perform insightful analysis of real-world problems and present the results in a way that makes sense even to people not so experienced with database technologies. This is important since business people are getting more and more interested in IT performance in general—as they really should. '' —Jussi Vira, Manager, SAP Technologies and Infrastructure, Nokia Corporation “理查德是 Oracle 性能优化方面的真正专家,他不仅掌握了理论和工具,还能对现实环境中 的问题进行精辟分析;他展现的结果,使在数据库技术方面没什么经验的人都能明了。这一点很 重要,因为总体说来商务人员对 IT 性能越来越感兴趣——他们理当如此。” —Jussi Vira,诺基亚公司 SAP 技术和基础设施经理
''Rich Niemiec is the Oracle expert on tuning and we can all learn from Rich. '' —Dr. Oleg Zhooravlev, CEO, Adit information Technologies, Israel “理查德·尼米克是 Oracle 性能优化方面的专家,我们大家都可以向理查德学习。” —Oleg Zhooravlev 博士,以色列 ADIT 信息技术首席执行官
''Someone said that smart people learn from their mistakes while wise people learn from others' mistakes. When involved in performance and tuning issues I think that both smart and wise ones can learn from the vast and valuable experience Rich has documented within these pages. '' —Maurizio Bonomi, Italy “有人曾经说过:聪明人能借鉴于自己所犯过的错误,而智者能借鉴于他人所犯过的错误。 当涉及性能和调优方面的问题时,我认为聪明人和智者都可以从理查德在这些篇章中介绍的丰富 而宝贵的经验中学到东西。” —Maurizio Bonomi,意大利
“上帝眷顾着我们大家,赋予我们做到最好的才智。”
致丽贾娜——挚爱……
最美丽的玫瑰啊,你在那儿!难忘那一天,上帝把你展现在我的面前。丽贾娜,你是严寒冬 夜里温暖我心灵的光,是带给我真幸福的心肝宝 贝儿,是让我充分发挥并取得成功的秘诀。黄砖 路通往钻石梦和翡翠城1,路上满是世俗、华尔街、 大公司和快速致富指南一类的东西,而丽贾娜从 未想过要走这条路。和她在一起的漫漫人生途中, 有太空山上的惊险,也有西湖边漫步的愉悦。旅 途终归是旅途,并非短程赛跑,也并非重要人物 的议事午餐会。有丽贾娜伴在身边,这一路都美 妙、精彩、不枯燥,感觉就是不一样。尽管时时 经历些艰难,常常遭遇到挑战,她和我却始终恩爱如初。 在 Oracle 这片天地里,当以 NASCAR(全国运动汽车竞赛协会)的速度和对手比拼时,想要放 慢速度谈何容易?丽贾娜和我相伴着走过了从食不求甘、租花办婚礼,直至安居乐业、高枕而无 虞的一段路。我们希望别人也来认识通往幸福的途径,而在这条途径上却要一路善待他人,简单 快乐,以至要为应对挑战而伤脑筋。有上帝引领,我们跟随着就是了,未来绝少是如人们自己想 象的那般样子。督促他人改变和成功往往是最艰难的差事。完美难求,我们全力以赴吧!丽贾娜 始终希望那些像我们一样在困境中长大的孩子们,能够凭借受教育而为自己赢得更好的前程,她 认为教育是在生活中获得成功的关键。当我们干得不错、得以放缓脚步的时候,她立即开始帮助 他人来认识这条成功之路。教育胜过力量,它充满变化,充满见识,并为我们提供了美好的未来。
1 译者注:“绿野仙踪”是获得了奥斯卡奖的歌舞大片,讲述小女孩桃乐丝被龙卷风刮到鲜花盛开的 OZ 国、又沿着黄砖路去翡 翠城向魔法师求愿的童话故事。
XVIII Oracle Database 11gR2 性能调整与优化
最重要的是,它不仅助您成功于当下,还助您成功于世界变革之际,而这样的变革必将贯穿于您 的一生之中。别了,翡翠城的宽门2,丽贾娜才真正称得上是 OZ 国里指点迷津的魔法师3啊(连她 的车牌号都以 OZ 开头)!尽管澳大利亚人非常友善,我们却没有选择坐在悉尼歌剧院的前排座位 里听音乐会,而宁愿回家,到 Cracker Barrel4店子前廊的摇椅上坐观树叶变化千般。 “生活里简单的事往往又是生命中最美妙的事”,随着时间的推移,丽贾娜教我懂得了这样 的道理。她嘛,总是 ● 更喜欢大众餐厅里的早餐,而不是蒂芙尼的早餐 ● 喜欢一把薄荷糖,胜过喜欢酒心巧克力 ● 喜欢南瓜咖啡,胜过喜欢唐培里侬香槟王 ● 喜欢去奥布韦斯奶品店来上一杯梦幻香草奶昔,胜过喜欢提拉米苏(我也一样!) ● 喜欢比克圆珠笔,胜过喜欢万宝龙镶钻笔 ● 宁愿小猫一大群外加一条大狗(斯巴达克斯),也不愿第五大道上禁止带宠物 ● 喜欢清晨自己驾车,带着孩子、喝着咖啡、听着广播电台 KLOVE 节目的音乐,更胜过 搭乘由专职司机驾驶的豪华轿车 ● 更愿意去“安德森太太乡村庭院”餐厅里品尝苹果饼,而不愿去参加高级商务午餐会 ● 喜欢自制的南瓜饼涂上鲜奶油,胜过喜欢法式焦糖布丁 ● 喜欢秋天色彩缤纷的树叶和清新的空气,胜过喜欢烈日当头、熙来攘往的海滨 ● 喜欢在阳光灿烂的日子里参加为圣母玛利亚雕像加戴花冠的仪式,胜过喜欢参加辣味午 餐 5 千米赛跑(那辣椒可是真过瘾!) ● 更喜欢搭马车逛密歇根大道,而不是搭出租汽车 ● 更喜欢徒步走过悉尼大桥的顶拱(攀登大桥),而不是由顶拱底下的车道开车过桥 ● 更喜欢在大堡礁潜水及在夏威夷冲浪,而不是闲坐在泳池边 ● 更喜欢沿着考艾岛的海滨漫步前往夏威夷式宴会,而不是去保罗的餐厅5用晚餐 ● 喜欢漫步西湖边,胜过喜欢搭观光车回旅馆 ● 喜欢轻快地走在千禧公园里,一路看烟花;胜过喜欢拉把椅子来,坐观北滩景 ● 在零下二十度的天气里赶去观看芝加哥熊队和绿湾包装工队的足球赛(那可是我的主意) ● 喜欢坐跳楼机,至少要坐旋转椅吧?(或者什么都不坐……这又是我的主意) ● 更喜欢在零下气温的天气里看完熊队和包装工队的足球赛后去“野火”餐厅里用餐,而 不是闷在家里看电视转播 ● 无悔于普度大学的糖果店之行,那可是千金难买的啊! Oracle 复杂、艰深而神秘。真正令人兴奋的时刻随着我们的第一个孩子牙牙学语、蹒跚学步 而开始,老大的后面还紧跟着老二、老三和老四。丽贾娜对丈夫的爱被她要让孩子们生活得更好 的责任心所超越了,而这种责任心是出乎于伦理道德、出乎于要让孩子们受到良好教育的承诺, 也是出乎于她仁慈待人的天性。上帝眷顾着我们大家,使我们每个人都可能获得做到最好的才智。 丽贾娜始终致力于从孩子们身上发掘出深藏着的潜力来,更重要的是,她以母亲那特有的爱和理
2 译者注:耶稣说:“你们要进窄门。因为引到灭亡,那门是宽的,路是大的,进去的人也多;引到永生,那门是窄的,路是 小的,找着的人也少”。 3 译者注:“绿野仙踪”中被龙卷风刮到 OZ 国的小女孩桃乐丝去翡翠城求魔法师指点归途。历尽艰辛回到家后,连声感叹“哪 里都比不上家里好”。 4 译者注:这是一家分布在美国各地的餐厅连锁店,开在临近公路的地方;一半餐厅一半商店的复合式经营,不管到了哪里, 店门口都有一长排手工打造的摇椅。 5 译者注:芝加哥最老牌的法式餐厅。
XIX
解来为孩子们引路,而雅各、卢卡斯、荷莉安和梅丽莎也总是让我们感到自豪。 丽贾娜并非完人,然而对我来说,她的确是非凡的领导者。她身上展现出了如下诸般特质: ● 正直诚实:她深爱他人,对他们负责,不负自己的信念 ● 生理勇气:最艰难的时候,她是位了不起的母亲(普天下的父母都经历过这样的时日,他 们为此而获得帮助和赞颂是理所应当的) ● 主动性:她以创业的精神从无到有地创办了“基石青年女子学习中心” (www.cornerstonewomen.org),而这也是出于对那些有此需求的人们的爱 ● 精神勇气:为建成“基石青年女子学习中心”,她承受政治异议的勇气令人惊异 ● 无私:她与他人分享己之所有,无论自己“初有的”还是“仅有的”,她都不吝惜 ● 灵活变通:她总是以厚道的态度和朝前看的愿望来面对不同意见 ● 坚韧:看似无路可走时,她上上下下、左左右右、里里外外地找,总能找到路(她从父母 那里传承了极为罕见的韧劲) ● 尊重:她尊重同事和周围所有的人 ● 谦逊:她多年来都生活在我的影子中,并没有人知道在 TUSC 跻身 Inc. 500 强公司之列 的过程中她帮过我多少忙 ● 刚毅:她出于信念和远见而工作。尽管面对障碍,她却有着凭借勇气和品格闯过最难之 难关的毅力,而且还帮助我来做到这一点 普度大学的糖果店把我带到了最亲爱的宝贝儿——丽贾娜的身旁,她给周围的人们以希望, 并照亮了通往美好未来之路:她是一位守护者。
作 者 简 介
Rich Niemiec 是全球知名的 IT 专家,他是 Oracle ACE 总监和 Oracle 认证大师。TUSC 公司 始创于 1988 年,总部在美国芝加哥,而 Rich 曾是 TUSC 的首席执行官和创始人之一。TUSC 是 致力于 Oracle 业务解决方案的系统集成商,跻身于全美发展速度最快的 500 强之列,在美国各地 有 10 家分号。目前,Rich 是 Rolta TUSC 和 Rolta 国际企业信息和通讯技术公司的主席,并且是 Rolta 国际董事会的常务顾问。TUSC 曾是 Oracle 公司在 2002、2004、2007、2008 和 2010 年的年 度合作伙伴,Rolta TUSC 则是 Oracle 公司 2011 年的年度合作伙伴。Rolta 公司是全球地理空间信 息化解决方案市场中的领头羊,同时对来自于基础设施、电信、电力、机场、国防、国土安全、 城市发展、城镇规划和环保等各业的需求提供信息化服务。 Rich 曾任全球 Oracle 用户协会(IOUG)主席,也是现任的美国中西部 Oracle 用户协会(MOUG) 主席。过去的 30 年里,他为宏扬 Oracle 技术而频频发表演说,足迹几乎遍及了美国所有的主要 城市,还到过很多国际大都市。他 6 度被评为 Oracle 合作者/全球用户大会最佳演讲人,10 度被 评为中西部用户大会最佳演讲人,还被评为了 Oracle 全球大会最佳演讲人。过去的 25 年间,他 为很多名列财富 500 强的客户设计过系统架构并实施过优化,这些客户中包括 ACT、玛氏公司、 麦当劳、诺基亚、Navteq(MapQuest)、密西根大学、AT&T 和百事可乐。他既可以开展教学又可 以提供咨询,在执行方向、数据库管理和架构、性能优化、项目管理和技术教育等方面的经验尤 为丰富。他是全球最早荣获 Oracle 大师认证(OCM)的 6 强人之一,经常和 Oracle 开发团队一道工 作,特别是在 beta 测试的过程中。2007 年,他撰写的《Oracle Database 10g 性能调整与优化》一 书被评为 Oracle 丛书中的最畅销书,在此之前,该书的 8i 和 9i 版也分别被评为性能优化类中的 最畅销书。 Rich 的名字于 1998 年被列入美国企业家名人堂。2006 年他荣获全国贫困家庭学生成功者奖, 2007 年又荣膺普度大学校友杰出电机和计算机工程师奖。
技术审校者简介
过去的 15 年间,Janet Stern 在 Oracle 公司的许多岗位上任过 职,工作重点是培训和文档,而这些最新文档是为诸如流(Streams)、 真正应用集群(Real Application Clusters,RAC)以及面向 Exadata 的 服务质量(Quality of Service,QoS)管理等 Oracle 最先进特性而创建 的。这样的阅历使她对 Oracle 数据库性能优化有着独到的见地。不 需要忙于 Oracle 文档的时候,她就在家里照料三个孩子、丈夫、三 只猫和她那条名叫 Jeb 的狗。 Michelle Malcher 是在数据库开发、设计和管理方面有着多年经验的 DBA 团队首领。她可以驾驭非常大的数据库环境,并且专长于安全性、 性能调优、数据建模和数据库结构。作为一名 Oracle Ace 总监,她乐于分 享最佳实践方面的知识,而这些知识都是牵涉到实际数据库环境的。她工 作的重心是设计、实施和维护那些支持业务和重要业务流程的稳定、可靠、 安全的数据库环境。她是全球 Oracle 用户协会(IOUG)的董事会成员,目 前还任该机构的教育署署长。她为 IOUG 的 Select Journal 杂志和一本名 为 Oracle Database Administration for the Microsoft SQL Server DBA(McGraw-Hill/Oracle 出版社,2010) 的书撰写文章,并且还是《Oracle Database 11g 初学者指南》的合著者之一。
译 者 简 介
杨中 清华大学计算机科学与技术系学 士、硕士,从 2004 年起在甲骨文研究开 发中心工作,现任数据库核心研发产品 线的高级经理,专注于 Oracle 数据库尤 其是一体机 Exdata 上的性能优化。参与 了国内外许多客户的 Exadata 项目,解 决棘手的性能问题,经常与客户分享经 验、心得,在 2010 年北京 Oracle Open World 上发表主题演讲“Oracle 数据库 性能终极揭密”和“最新真实世界性能 挑战”。 感谢妻子欧阳婷长久以来的相知相伴。在本书翻译的艰苦阶段,我们的宝宝茗烨呱呱降生, 为我们二人带来从未经历过的欢喜。婷承担了大部分抚育幼子的任务,再次感谢我生命中的两位 挚爱对我的全部支持!
XXIV Oracle Database 11gR2 性能调整与优化
朱波 2007 年6 月加入 Oracle 数据库研发 部门,参与 Oracle RAC 数据库多个版本 (10gR2、11gR1、11gR2 等)的研发工作, 对 Oracle RAC、ASM 等技术有深入理 解。2011 年 10 月至今服务于 Oracle 亚 太区售前技术支持 iTech 部门。支持过 国内、香港、日本和美国等地的众多客 户。工作之余乐于分享和与同行交流, 有关这些内容可以在他的个人博客 www.rickyzhu.com 上找到。 在本书的翻译过程中,我的妻子和七岁的儿子给了我最大的理解和支持,在这里要特别感谢 他们!
吕学勇 北京人,在美国留学、生活、工 作二十余年,从 AT&T 贝尔实验室开 始了数据库应用开发的职业生涯。在 芝加哥期货交易中心,为世界首架电 子期货交易平台编写过数据库应用程 序。涉足 Oracle DBA/应用程序开发 领域后,热衷于算法理论在数据库性 能优化方面的应用,曾以在 Oracle 公 司的《技术通讯》杂志上分析典型案 例为趣事。目前在 Oracle 深圳任 iTech 顾问经理。 与妻子智红结缘于加拿大温哥华,闲暇时喜欢到世界的各个角落去远足。傍晚时分,她起火 煮饭,和在家里一样。还要准备好次日的行程用品,然后就看着我心无旁骛地为报社撰稿,并在 我与读者分享的远方见闻和感受中,偶尔插一句她的话。
致 谢
本书的目的,主要是想帮助初级和中级的 Oracle 专业人士了解 Oracle 系统及更好地优化它。 书里也介绍了不少专家主题,但首要的任务却是帮助那些被性能问题折磨得十分沮丧的专业人士, 他们希望得到有助于改善数据库性能的朴实建议。本书的目标很单纯:提供装满此类建议的武库, 在各种不同的情况下您都可以利用这些建议来使系统快起来。 我要感谢 Janet Stern 美妙绝伦的技术编辑工作,来自 Oracle 的她绝对是非常棒的科技大师, 我简直不能奢望可以找到比她更好的技术编辑了! 她为每章都增添了宝贵的内容,并认真梳理了 每一个细节,她是我所认识的最敬业、最能干的 Oracle 专业人士之一。我也要感谢 Michelle Malcher 帮助技术编辑了本书靠后面的一些章节,没有 Michelle 出色的工作,我们就不可能把事情完成得 如此快和好。我要感谢 McGraw-Hill 的高级策划编辑 Paul Carlstroem,他带我走过本项目的每一 步骤时,都是风度翩翩,指导有方(需要他的时候,他有叫必到);感谢 McGraw-Hill 的策划协调 员 Stephanie Evans,他使我们一路下来都保持着正确的方向。McGraw-Hill 的高级营销经理——Ian Au,是极好的共事者和出色的推动者。Melinda Lytle 在协调所有艺术产品方面做了出色的工作。 谢谢您,Lisa McClain,您使我开始着手这项工作并很早就制定了方向。感谢我的清样编辑—— LeeAnn Pickrell,她确实把本书提高到了一个新水平上。LeeAnn 采用了使本书更加直观的标准, 改善了书的连贯性,让句子更清晰并带了几分莎士比亚的风格,她以这些来确保本书的易读性, 确实把它变成了一部对读者更为有益的书。最后,感谢 Scott Rogers 和 Jeremy Judson,因为我告 诉您们说几星期后就可以交货而实际上拖了两年,但您们还是让我的书获得了通过。
感谢在下述章节中提供了帮助的人: ● Mike Messina,您更新了第 1 章的很多内容,测试了第 2 章中的查询并更新了 b-level 部 分,感谢您的工作。您的工作价值无边,您是难得的 Oracle 人才! ● Kevin Loney,感谢您先前更新第 2 章的工作。
XXVI Oracle Database 11gR2 性能调整与优化
● Sridhar Avantsa 更新了第 3 章并做了很多补充。此外,Bill Callahan 和 Nitin Vengurlekar 先 前更新了第 3 章。 ● Lucas Niemiec 测试了第 4 章中的脚本,Craig Shallahamer、Randy Swanson 和 Jeff Keller 先 前做过注释和更新。 ● Anil Khilani、Prabhaker Gongloor(GP)、David LeRoy、Martin Pena、Valerie Kane 及 Mughees Minhas,感谢您们在 Enterprise Manager 屏幕截图以及第 5 章的信息方面的帮助。 ● Warren Bakker,感谢您对第 6 章所做的极好的更新和补充,感谢 Mark Riedel 和 GregPucka 先前对这一章的帮助。 ● Mark Riedel 对第 7 章做了极好的更新。感谢 Lucas Niemiec 在“要诀”方面的额外研究 工作。 ● Rama Balaji 协助更新了第 8 章,Connor McDonald 和 Rob Christensen 在先前的注释和 版本方面提供了帮助。 ● Mike Messina 帮助将 Real Applications Testing 和 SQL 性能分析器补充到了第 9 章,加拿 大的 Joe Holmes 为第 9 章提供了高级信息。哥伦比亚国立大学麦德林分校的 Francisco Javier Moreno、Guillermo L. Ospina Romero 和 Rafael I. Larios Restrepo 协助了第 9 章的测 试。Roger Schrag 提供了第 9 章中连接方面的部分原始信息。 ● Bob Taylor 通过对第 10 章的更新又一次出色地完成了工作,Joe Trezzo 和 Dave Ventura 对先前的版本提供了帮助。 ● 与 Madhu Tumma、Brad Nash、Jake Van der Vort 和 Kevin Loney 对第 11 章作出贡献的同 时,Richard Stroupe 对该章做了极好的补充。 ● Rama Balaji 帮助更新了第 12 章里的很多内容,Kevin Gilpen、Bob Yingst 和 Greg Pucka 也作出了贡献。 ● Graham Thornton,感谢您对第 13 章的更新和所做的极好补充,Kevin Gilpen 对先前的版 本提供了帮助。澳大利亚的 Steve Adams 过去曾经是技术编辑,并且写过很多 X$脚本。 ● Hollyann Niemiec 做了第 14 章中引述的工作,Robert Freeman 和 Kevin Loney 为第 14 章 先前的版本提供了帮助。 ● Brad Nash 对第 15 章先前的版本提供了更新,Lucas Niemiec 在 11gR2 上对该章的查询进 行了测试。 ● Doug Freyburger 对第 16 章做了极好的更新,Judy Corley、Mike Gallagher 和 Jon Vincenzo 更新过先前的版本。 ● Lucas Niemiec 对附录 A 中的所有查询做了测试并针对 11gR2 做了更新。 ● Jacob Niemiec 对附录 C 中的所有查询进行了测试并针对 11gR2 做了更新。 ● Melissa Niemiec 对前言部分提供了思路、引述和建议。
致 谢 XXVII
感谢那些和我的生活有重大关系的 Oracle 人士: ● 感谢 Larry Ellison、Bob Miner、Bruce Scott 和 Ed Oates 创造的伟大数据库及前瞻性思维, 您们开创了有史以来最具创新力的企业! ● IOUG(国际 Oracle 用户组)使我这许多年来的 Oracle 生活从容了许多。 ● Andy Mendelsohn,感谢您对一些十分棘手的问题提供了答案,并且驾驭这一无与伦比的 Oracle 数据库不断达到新的水平。 ● Judith Sim,您是把 Oracle 推向顶峰的公司领导人之一,感谢您的帮助! ● Thomas Kurian,感谢您使融合中间件出名,并把 Oracle Applications 提高到新的水平。 ● Mary Ann Davidson,感谢您的领导才能并维持 Oracle 的安全。 ● Ted Bereswill,您使我们在 Oracle 合作伙伴计划中成为真正的伙伴! ● Tom Kyte,您是至上的 Oracle 技术大师! ● Angelo Pruscino、Kirk McGowan 和 Erik Peterson,没有你们三位,就没有 RAC;没有 Angelo,RAC 将会是一团糟。感谢 Dan Norris 和 Phil Stephenson 在 Exadata 方面的帮助。 ● Justin Kestelyn,您用 OTN 教育了全世界。 ● Tirthankar Lahiri 在 bufffer cache 方面的工作做得多漂亮! ● Bruce Scott,感谢您付出时间来接受专题文章的采访,并且发来罕见的 Oracle 创始人的 照片。
除了上面感谢过的人之外,还要感谢下述在某种意义上为本书的这一版出过力的人们: David Anstey、Eyal Aronoff、Mike Ault、Janet Bacon、Kamila Bajaria、Roger Bamford、Greg Bogode、Mike Broullette、Don Burleson、Bill Burke、Rachel Carmichael、Tony Catalano、Rob Christensen、Craig Davis、Sergio Del Rio、Dr. Paul Dorsey、Kim Floss、Mark Greenhalgh、K. Gopalakrishnan、Tim Gorman、Kent Graziano、Damon Grube、Roman Gutfraynd、Vinod Haval、 Gerry Hills、Steven Hirsch、Nguyen Hoang、Pat Holmes、Scott Heaton、Jeff Jacobs、Tony Jambu、 Tony Jedlinski、Ron Jedlinski、吉志刚、Jeremy Judson、Dave Kaufman、Mike Killough、Peter Koletzke、 Tom Kyte、Mike La Magna、Vinoy Lanjwal、Steve Lemme、Jonathan Lewis、Bill Lewkow、Kevin Loney、吕学勇、Scott Martin、Connor McDonald、Sean McGuire、Ronan Miles、Cary Milsap、Ken Morse、Shankar Mukherjee、Ken Naim、Arup Nanda、Frank Naude、Pradeep Navalkar、Albert Nashon、 Aaron Newman、Dan Norris、Stanley Novinsky、Cetin Ozbutun、Tanel Poder、Venkatesh Prakasam、 Greg Pucka、Heidi Ratini、Steve Rubinow、Chuck Seaks、Bert Spencer、Craig Shallahamer、Burk Sherva、 Judy Sim、Richard Stroupe、Felipe Teixeira de Souza、Randy Swanson、Megh Thakkar、George Trujillo、 Madhu Tumma、Gaja Krishna Vaidyanatha、Jake Van der Vort、Murali Vallath、Shyam Varan Nath、 Dave Ventura、Sandra Vucinic、Lyssa Wald、Milton Wan、Graham Wood、Tom Wood、杨 中 、Pedro Ybarro、Ghazi Ben Youssef 和 Dr. Oleg Zhooravlev. 我要感谢一生中两个最好的搭档:Brad Brown 和 Joe Trezzo。 我们组成了一个兄弟大乐队!我要感谢 TUSC、 Rolta、Piocon 和 WhittmanHart(现在都是全球 Rolta 公 司)里所有的人,他们每天都刻苦工作,力求完美。感谢 Barb、Karen、Sandy、Kim 和 Amy 使我们保持理智,感 谢 Tony、Dave、Barry、Burk、Bill、Bob、Janet、Terry、 Heidi、John、Matt 和 Mike 的领导才能和留给我的美好
XXVIII Oracle Database 11gR2 性能调整与优化
记忆,感谢 KK、Ben、Mark、Sohrab、Vinay、Blane、Jack、Dave 和 Rif 把我们带到那个全球性 的天地中去,感谢 Sanjay、Narendra、Nimesh 和所有使我们在世界的另一边保持头脑清醒的人 们。我要感谢 Eric Noelke 和 Mike Simmons 给了我在 Oracle 里的第一份工作,还要感谢 Matt Vranicar 在我刚去的时候帮我搞懂了索引。虽然不能去向 Rolta 里的近 4000 人一一致谢,但我还 是要感谢大家每日里使世界变得更好的工作!
我要感谢那些来自 Rolta TUSC 的、在本书写作过程中协助过我的人们(这是一个超级巨星的 小清单): Barbara Allen、Stacy Allen、Ravishankar Ananthanarayana、Lalit Anapu、Andy Anastasi、Nilton Aquino、Jyotin Arora、Manu Arora、Hiranya Ashar、Sridhar Avantsa、Steve Babin、Rohit Badiyani、 Warren Bakker、Rama Balaji、Mathi Balasubramaniam、Bruce M. Bancroft、Bill Banze、Otis Barr、 Roger Baroutjian、Chris Baumgartner、Roger Behm、Vinny Belanger、Matthew Berrisford、Bobby Bhandari、Sohrab Bhot、Donald Bieger、Paul Bobak、John Bogdue、Greg Bogode、Keith Braley、 Jessica Brandenburg、Christopher Brinkman、Bob Britton、Bradley David Brown、Deborah Bryda、 Mike Butler、Eric Kamplin、Alain Campos、Bolton Carroll、Tony Catalano、Matthew Chance、Bharat Chitnavis、Bob Christensen、John Clark、James Clarke、Mike Cochran、Liz Coffee、Randy Cook、 Judy Corley、Joselle Cortez、Dick Coulter、Matt Cox、Janeen Coyle、Darrel Craig、Keith D’agostino、 Janet Dahmen、Terry Daley、Prithis Das、Don Davis、David deBoisblanc、Brian Decker、Hank Decker、 Mario Desiderio、Dinesh De Silva、Ernie DiLegge、Robert Donahue、Dan Dosmann、Melloney Douce、 Barb Dully、Brian Dunnells、Christopher Dupin、Ben Eazzetta、Melissa Eazzetta、Marcus Eidson、 Phillip Ellington、Reida Elwannas、Phil Estep、Mark Fate、Andy Fiesman、Robert Filtzkowski、Robin Fingerson、Newton “Fletch” Fletcher、Yvonne Formel、Dave Fornalsky、Joshua Forrest、Stacie Forrester、 Sergio Frank “Power Surge”、George Frederick、Doug Freyburger、Jan Gabelev、Steve Galassini、John Gallacher、Chris Gamble、David Gannon、Laxmidhar Gaopande、Michael Garcia、Nimesh Gawad、 Biju George、Santhosh George、Brad Gibson、Brad Gillespie、Kevin Gilpin、Agenor Gnanzou、Martin
致 谢 XXIX
Goodfriend、MK Govind、Chelsea Graylin、Dexter Greener、John Griebel、Ignacio Guerrero、Narendra Gupta、Brian Hacker、John Halsema、Scott Heaton、Andrew Henderson、Katy Heng、Kristina Henning、 Allwyn Henry、Mark Heyvaert、Karen Hollomon、Amy Horvat、Vijayashankar Hosahalli、Sharon Howard、Thomas Huelsman、Mohammad Jamal、Cyndi Jensen、Rif Jiwani、Shafik Jiwani、Benjamin Johnson、Kimberly Johnson、Cristin Jones、Monica Jones、Kimberly Joyce、William Kadlec、Sudhir Kalavagunta、Joanna Kalgreen、Sandeep Ohri、Anil Kalra、Palaniappan “Palani” Kasiviswanathan、 Dave Kaspar、Dorraine Keim、Karen King、Nicholas King、Bruce Kissinger、Robert Koester、Kirby Kraft、Kiran Kulkarni、Sampath Kumar、Matthew Kundrat、Thomas Kuruvilla、Deborah Kuznik、 Felix LaCap、Lynn Lafleur、Wendy Lamar、Bob Landgren、Bob Landgridge、Randy Lawson、Bill Lewkow、Jack Leahey、Brad Linnell、Lawrence Linnemeyer、Paul LoBue、Scott Lockhart、George Loewenthal、吕学勇、Andy Mackintosh、Dana MacPhail、Chris Madding、Tim Mahoney、Gregory Mancuso、Suganya Manoharan、Claude Mariottini、Donald Martin、Daniel Martino、Chip Mason、 Grant Materna、Joe Mathew、Chris McElroy、Brendan McGettigan、Patrick McGovern、Kamlesh Mehta、 Carlos Mendez、Rey Mendez、Subodh Mendhurwar、Prakash Menon、Andy Merrett、Mike Messina、 Matt Metrik、Brian Michael、Eric Mies、Melissa Miller、Michael Milner、Quadeerullah Mohammed、 John Molinaro、Patrick Monahan、Albert Moreno、Sanjay Narkar、Ravishankar Narayanan、James Nash、 Eric Noelke、Mark O‘Dwyer、Gary Ohmstede、Sandeep Ohri、Steven Ostendorf、James Owen、David Pape、Breanne Parker、John Parker、Mohan Parna、Charlotte Partridge、Amit Haresh Patel、Ashvinkumar Patel、Jitendra Patibandla、Reggie Peagler、Vishnuvardhan Reddy Peddamaru、Mark Pelzel、Gregg Petri、 Greg Pike、Caleb Pingelton、Eric Potts、James Powell、Lynne Preston、Preetha Pulusani、Mohammed Quadeer、Karen Quandt、Kathleen Quinn、Sriram Rajagopalan、Aakash Rami、Samir Rane、Heidi Ratini “Trinity”、Douglas Resler、Aleksandr Reyderman、Mark Riedel、Holly Robinson、Jeremy Rogers、 Randy Rogers、Rob Rolek、Sean Ryan、Sherry Safranski、Mirinda Sandoval、Alwyn Santos “The Machine”、Satinath Sarkar、John Sasser、Leon Saverus、Vinay Sawarkar、Blane Schertz、Louis Schoeller、 Steven Schuld、Chad Scott、John A. Senatore、Ahsan Shah、Girishan Shanmugam、David R. Shearin、 Sharon Sherley、Burk Sherva、Makarand Shete、Jeremy Simmons、A.P. Singh、Aditya Singh、KK Singh、 Karan Singh、Ronak Sitafalwalla、Dave Sligting、David Smith、Molly Smith、Karen Smudde、Patrick Spaulding、Laura Sprowls、Stephanie Spurrier、Ed Stayman、Jack Stein、Michael Stevenson、Cheryl Stewart、Jerzy Suchodolski、Sreedhar Swayampakula、Srikalyan Swayampakula、Michael Tarka、 William Tate、Atul Tayal、Bob Taylor、Sameer Satish Thawani、Chris Thoman、Leo Thomas、Bryan Thompson、Graham Thornton、Thomas Tisdale、Bill Toebbe、Renee Townsend、Joseph Conrad Trezzo、 Dave Trch “Torch”、Joel Tuisl、Tom Usher、Amit Vaidya、Hiten Valia、Lynne VanArsdale、Chandrasekar Vellala、Dave Ventura、Tejinder Vohre、Matthew G.Vranicar、Ashrith R. Vuyyuru、Sandra Wade、 Randy Warner、John Watson、John Weicher、Joyce Wheeler、John Whitaker、Barry Wiebe、James Williams、Nicole Wilson、Mark Wittkopp、Mark Woelke、Gary Wojda、Lisa Wright、Bob Yingst、 James Zadrovicz 及 Julian Zambra。
XXX Oracle Database 11gR2 性能调整与优化
还要感谢那些对我的生活产生了影响的人们: Sandra Hill、Floyd & Georgia Adams、Kristen Brown、Lori Trezzo、Sohaib Abbasi、Michael Abbey、Ian Abramson、Jeff &Donna Ackerman、Steve & Becky Adams、Keith Altman、Judson Althoff、 Joe Anzell、Joe Arozarena、Ian Au、Mike Ault、Paster James C. Austin、Jim Basler、Nicholas Bassey、 John Beresniewicz、Hardik Bhatt、Ronny Billen、Jon & Linda Bischoff、Keith Block、George Bloom、 Melanie Bock、Mike Boddy、David Bohan、A.W. Bolden、Rep. Henry Bonilla、Rene Bonvanie、Stephen Boyle、Gary Bradshaw、Ted Brady、Barry Brasseaux、Aldo Bravo、J. Birney & Julia Brown、John Brown、Karen Brownfield、Sam & Rhonda Bruner、Bill Burke、Ashley Burkholder、Lillian Buziak、 Dan Cameron、Bogdan Capatina、Rachel Carmichael、Monty Carolan、Christina Cavanna、Sheila Cepero、Edward Chu、Sonia Cillo、Dr. Ken Coleman、Margarita Contreni、Mike Corey、Peter Corrigan、 Jason Couchman、Stephen Covey、Shanda Cowan、Richard Daley、Sharon Daley、Nancy Daniel、 Barb Darrow、Jeb Dasteel、Mary Ann Davidson、Tom Davidson、Elaine DeMeo、Tony DeMeo、Sohan DeMel、Jose DiAvilla、Julian Dontcheff、Mary Lou Dopart、Joe Dougherty Jr.、Bob & Lori Dressel、 Carl Dudley、Carlos Duchicela、Ben & Melissa Eazzetta、Matt Eberz、Jeff Ellington、Lisa Elliot、Brian Embree、Buff Emslie、Dan Erickson、Chick Evans Jr.、Lisa Evans、Dr. Tony Evans、Mark Farnham、 Tony Feisel、Dick Fergusun、Julie Ferry、Stephen Feurenstein、Ted & Joan File、Caryl Lee Fisher、 Lee Fisher、Charlie Fishman、Tim & Jan Fleming、Flip、Joe Flores、Andy Flower、Mark Fontechio、 Heidi Fornalsky、Vicky Foster、Rita Franov、Kate Freeman、Doug Freud、Mike Frey、Dr. Susan Friedberg、Sylvain Gagne、Karen Gainey、Mike Gangler、Fred Garfield、Charles Gary、Sharon Gaudet、 Julie Geer-Brown、Jenny Gelhausen、Len Geshan、George Gilbert、Tom Goedken、Mark Gokman、 Alex Golod、Laverne Gonzales、John Goodhue、Ellen Gordon、Kevin Gordon、Greg Gorman、Dennis Gottlieb、Joe Graham Jr.、Cammi Granato、Tony Granato、John Gray、Kent Graziano、Alan Greenspan、 Carrie Greeter、Sarah Grigg、Ken Guion、Mark Gurry、Eric Guyer、Pasi Haapalainen、Steve Hagan、 Rebecca Hahn、John Hall、Don Hammer、Rick & Tammy Hanna、Robert Hanrahan、Bob Hausler、 Jim Hawkins、Marko Hellevaara、Jeff Henley、John Hernandez、Bob Hill、James Hobbs、Stacy Hodge、 Kristin Hollins、Pat Holmes、Napoleon Hopper Jr.、Howard Horowitz、Jerry Horvath、Dan Hotka、 Rich Houle、Maureen Hoyler、Ellie Hurley、Laura Hurley、Jerry Ireland、ShivIyer、Suman Iyer、 Roger Jackson、Jeff Jacobs、Ken Jacobs “Dr. DBA”、Tony Jambu、Don & Dianne Jaskulske、Amit Jasuja、Corey Jenkins、Bobbi Jo Johnson、Steve Johnson、Jeff Jonas、Shawn Jones、Michael Jordan、 Michael Josephson、Jeremy Judson、Mark Jungerman、Valerie Kane、Emily Kao、Ari Kaplan、Stephen Karniotis、Tom Karpus、Dr. Ken & Cathy Kavanaugh、Maralynn Kearney、John Kelly、Robert Kennedy、
致 谢 XXXI
Kate Kerner、Anil Khilani、Ann Kilhoffer-Reichert、John & Peggy King、Martin Luther King Jr.、Jan Klokkers、George Koch、Jodi Koehn-Pike、Fran Koerner、Sergey Koltakov、Larry Kozlicki、Mark & Sue Kramer、Paul C. Krause、Mark Krefta、Ron Krefta、Dave Kreines、Thomas Kurian、John Krasnick、 Mark Kwasni、Paul Lam、Donald Lamar、Marva Land、Ray Lane、Karen Langley、Jari Lappalainen、 Carl Larson、John Lartz、Brian Laskey、Deb LeBlanc、Margaret Lee、Sami Lehto、Herve Lejeune、 Steve Lemme、Coleman Leviter、Troy Ligon、Cheng Lim、Victoria Lira、Juan Loaiza、Quan Logan、 Jeff London、Xavier Lopez、Bob Love、Senator Dick Lugar、Dave Luhrsen、James Lui、Lucas Lukasiak、 Barb Lundhild、Liz Macin、Tony Mack、Ann Mai、Tom Manzo、Paul Massiglia、Lisa McClain、 Donna McConnell、Stephen McConnell、Kirk McGowan、Carol McGury、Dennis McKinnon、Amanda McLafferty、Mary Elizabeth McNeely、Gail McVey、Ehab & Andrea Mearim、Margaret Mei、Sara Mejia、Kuassi Mensah、Scott Messier、Kelly Middleton、Regina Midkiff、Debbie Migliore、Mary Miller、 Jeff Mills、Mary Miner、Justine Miner、Jal Mistri、Dr. Arnold Mitchem、John Molinaro、Congresswoman Gwen Moore、Matt Morris、Ken Morse、Solveig Morkeberg、Bill Moses、Jane Mott、Steve Muench、 Brad Musgrave、Francisco Munez、Minelva Munoz、Scott Myers、Ken Naim、Shyam Nath、Cassie Naval、Bill Nee、Paul Needham、Marie-Anne Neimat、Scott Nelson、Phil Newlan、Olli Niemi、Cindy Niemiec、Dr. Dave & Dawn Niemiec、Mike Niemiec、Regina Sue Elizabeth Niemiec、Robert & Cookie Niemiec、Dr. Ted & Paula Niemiec、Merrilee Nohr、Robin North、Rick Norris、Stan Novinsky、Perttu Nuija、Cheryl Nuno、Julie O’Brian、Shaun O’Brien、Jon O’Connell、Barb O’Malley、Anne O’Neill、 Mike Olin、Francisco Martinez Oviedo、Rita Palanov、Jeri Palmer、Bharat Patel、Jignesh Patel、Arlene Patton、Ray Payne、Steve Pemberton、Monica Penshorn、Dr. Mary Peterson、Michael Pettigrew、Elke Phelps、Chuck Phillips、Mary Platt、Lisa Price、Megan Price、John Quinones、John Ramos、Gautham Ravi、Sheila Reiter、Frank Ress、Denise Rhodes、Elizabeth Richards、Aisha Richardson、Dennis Richter、 Arnold Ridgel、Wendy Rinaldi、Anne Ristau、Tom Roach、George Roberts、Jerry D. Robinson Jr.、 Mike Rocha、Ulka Rodgers、Charlie Rose、Chuck Rozwat、Leslie Rubin、Steve Rubin、Mike Runda、 Joe Russell、Mike Russell、Katy Ryan、Theresa Rzepnicki、Stan Salett、David Saslav、Terry Savage、 Rami Savila、Nanak Sawlani、Ed Schalk、Ed Scheidt、Douglas Scherer、Scott Schmidt、Jeff Schumaker、 David Scott、Kevin Scruggs、Mike Serpe、Guner Seyhan、Allen Shaheen、Lewei Shang、Smiti Sharma、 Dr. Austin Shelley、Muhammad Shuja、Julie Silverstein、Judy Sim、Mike Simpson、Angela Sims、 Sinbad、David Sironi、Dinu Skariah、Linda Smith、Mark Smith、Mary Ellen Smith、Peter Smith、 Congressman Mike & Keta Sodrel、Peter Solomon、Marc Songini、Julie Sowers、Anthony Speed、Jeff Spicer、Rick Stark、Cassandra Staudacher、Bill Stauffer、Leslie Steere、Phil Stephenson、Thomas Stickler、 Bob Stoneman、Bob Strube Sr.、Bob Strube Jr.、Olaf Stullich、Burt & Dianna Summerfield、Cyndie Sutherland、Inna Suvorov、Matt Swann、Mary Swanson、Michael Swinarski、Matt Szulik、Vijay Tella、 David Teplow、Marlene Theriault、Margaret Tomkins、Susan Trebach、Eugene (EGBAR) & Adrienne (Sky’s the Limit) Trezzo、Sean Tucker、David Tuson、Vicky Tuttle、Razi Ud-Din、Paul Ungaretti、 Pete Unterlander、Lupe Valtierre、Petri Varttinen、Angelica Vialpando、Jussi Vira、Jarmo Viteli、 Matt Vranicar、Oleg Wasynczuk、Lori Wachtman、Bill Weaver、Jim Weber、Mike Weber、Huang Wei、 Dale Weideling、Erich Wessner、Steve Wilkenson、Dennie Williams、Donna Williams、Sherry Williams、 John Wilmott、Marcus Wilson、Jeremiah Wilton、Greg Witek、Wayne Wittenberger、Ron Wohl、 Marty Wolf、Randy Womack、Marcia Wood、Chris Wooldridge、Don Woznicki、David Wright、吕 学勇,Stan Yellott、Janet Yingling Young、Ron Yount、吉志刚,Tony Ziemba、Mary Ann Zirelli、
XXXII Oracle Database 11gR2 性能调整与优化
Edward Zhu、Chris Zorich 及 Andreas Zwimpfer.
感谢购买此书并致力于提高您自己的技能。托尼神父曾经告诉了我在生活中所需要知道的一 切:“没有什么事情大到了连上帝都处理不了,也没有什么事情小到了上帝根本就不去留意。” 上面列举过的人们都对我的人生和这部书产生过或多或少的影响,感谢他们持续不断的努力!
追忆: 最后,我会铭记近几年间我们失去的 Oracle 界朋友。Chris Madding“大哥”是优秀的经理、销售,而他是更为优秀的人 道主义者。他曾不知疲倦地创办和经营“小小信仰基金会”, 以帮助有特殊需要的儿童,我们的团队将永远怀念他!我们还 失去了 4 位高科技界的巨擘:史蒂夫·乔布斯一向是最有远见 的革新家,他创造了若干世上最神奇的器具。每当人们自以为 知道苹果行将推出什么样产品的时候,他们都会再次超过人们 的预期。Ken Olsen 在 1957 年创办了 DEC。DEC 有多么重要 呢?Oracle 最初就是为 DEC PDP-11 而编写的!微软首版的 Basic 则是在 DEC PDP-10 上编写的。颠峰时期的 DEC 是排在 IBM 之后的第二大科技公司。Dennis Richie(贝尔实验室的二人搭档之一,另一位是 Ken Thomson) 带给了我们 C 语言和 UNIX 操作系统。Jim Gray 是解释如何构建数据库的天才,他编著了《事务 处理:概念与技术》一书。我们同样会怀念 Bobby Patton。 终有一天,我们的工作完成了,上帝带我们回家去。我们很快就会“和天使们一起跑在金子 作成的街道上”,我期待着这一天的到来。但在它来到之前,我们要继续有所作为,靠我们互相 之间极好的行为,确保上帝通过我们来讲话!通过不断提升诚信、知识、血气之勇、忠诚、克制、 热情、无私、机智、道德之勇、尊重、谦卑和主动性,可以确保我们有毅力面对任何艰难的挑战。 当然,别忘了:信心,希望与爱……“其中最伟大的是爱”。以品格和一颗善待他人的心来影响 这个世界——这就是我的人生目标。
绪 言
“为他人而活,才活的值得。” —阿尔伯特·爱因斯坦 第 5 维度像 Exadata 的磁盘空间一样广阔,但对于那些不相 信它的人们来说,它就像是在计算机程序中遇到的无穷循环一样: 来得太早了些,让他们措手不及。这第 5 维曾经仅仅是幻想中的 维度而已,我们梦想着其中单个的数据库上就带有成百万 TB 的 数据和载体。在那样的奇境里,开发人员编写的任何查询都不会 因超时而受罚,也不会成为匿名 kill -9 命令的受害者;速度和磁 盘空间都不再(那么)重要。这一维度现已成真,我把它称作“EB 地带”吧! 无论我们是否喜欢,也不管我们是否做好了准备,勇敢的新 世界正朝着我们疾步走来。从 8 位计算和 256 字节内存访问中我 们就看到了这个世界最初的微光。接下来,16 位计算和 64KB 内 存、1MB 扩展内存 Windows 系统将这微光变成了更强的光焰。 32 位计算搭建起了 GB SGA 的殿堂,而正值我们昂首阔步迈向它之际,互联网的时代到来了,我 们随之看到川流不息的万盏车灯把条条高速路照得通明。目前的科技已经发展到 64 位计算,并且 要抛开 32 位互联网小天地留下的 4GB 最大寻址范围的包袱。在 64 位计算中,可寻址空间的理论 极限(2 的64 次幂)已变为 16EB(艾字节)或18,446,744,073,709,551,616 字节(264 字节)。而今,16EB(18 后面跟着 18 个零)正凝视着我们,等待我们将其惊人的能力利用到贯穿着我们生活的方方面面中 去。我们现在有的乃是 EB 级的数据库,而不再是 TB 级的了(1 个 EB 是 100 万 TB),11g 数据库 在规模上能够达到整整 8EB!登录到 PB 级的 SGA 上面去吧,别再用 GB 级的 SGA 了(1 个 PB 是 1000 TB);这一跃可绝不止上了一级台阶,计算能力再也不是每 18 个月才翻一番(摩尔定律)了。 我们并非只想从地球跃向月球,我们正在跃向天际,跃向遥远的恒星,跃向 TB 的 100 万倍呢!
XXXIV Oracle Database 11gR2 性能调整与优化
直接可寻址 间接/扩展可寻址 4 位 16 640 8 位 256 65,536 16 位 65,536 1,048,576 32 位 4,294,967,296 64 位 18,446,744,073,709,551,616
Oracle 以 10g 版和能够扩展到 8EB(8EB 或 800 万 TB)规模的数据库引领我们踏上 EB 之地, 不过那时并没有买家:哪怕是仅能容纳 1EB 的硬件,也还没有人能筹到足够的资金来买呢!有些 客户把早期的 PB 级硬件在视频方面派上了用场,一些华尔街交易所在短线利得的领域里使用了 TB 级硬件,但购买 EB 级硬件的代价实在是太高了,犹如飞得太靠近太阳,就终归难免于难一样1。 事实真相是:在过去的 20 年间,硬件公司未能跟上 Oracle 向前发展的脚步。 对 Sun 的收购使 Oracle 永远地改变了竞争格局,终于可以飞得靠太阳近些又不必担心被烤得 焦头烂额了。网格计算把 DBA 铸成了钢铁侠(Larry 可是在“钢铁侠 2”里现了身的呦,如果您还 未看过那部影片的话。小罗伯特·唐尼2甚至从他的工作站上访问 Oracle 网格,以确定坏蛋们所在 的位置),这再一次印证了好莱坞梦幻与现实生活之间,相隔得并不似我们想象得那么遥远。连最 后的决战都发生在 Oracle 圆顶大厦里,并以钢铁侠战胜坏蛋而告终(我们已经在计算机世界里看过 这部电影,Oracle 一次次地胜出)。Exadata 和其他 Oracle 硬件(从第 1 章里略窥一斑,从第 11 章 中了解详情)如今已与 Oracle 数据库设计、制造在一起,提供了让人们难以置信的容量和性能。您 的未来无可限量,世界的未来无可限量!天空再也不是极限了:借助于 Oracle 11g,您已经把它 远远地甩在了身后。 Oracle 是如何成就了这些的呢?他们会被其他公司赶上吗?假定您于 1977 年借助关系型数 据库和 Codd 的非专利理念办起了公司,那是 Codd 所贡献的最佳理念了,而软件专利在当时尚未 获得承认。1977 年时 Codd 仍在 IBM 供职,而他的理念却帮助有史以来第一个商业化的关系型数 据库在市场上打败了 IBM。您从天底下最好的大学里聘用最好的人才,并使他们以悬梁刺股的干 劲发愤工作;您付给他们双倍于其他公司里的年俸(若是销售,则要三倍的年俸了),但他们务必 要兢兢业业、成绩卓然。您的首个客户是非商业性的——美国中央情报局,于是安全成了您做事 的特点:产品经过的各个途径都有安全性方面的考虑,每个产品开发人员的头脑中都有安全性的 意识,Oracle 智囊团中的每一份子都为了安全性的问题而煞费苦心。您最早的商业客户是美国银 行和赖特帕特森空军基地,所以您从一开始就知道该如何为大企业提供服务了。您比 Sun 晚 8 天 上市,比微软早一天出山,而那两位总是跟在您的后面挑战强大的、连名字里都有“生意”二字 的 IBM3。那时的 IBM,一统着财富 1000 强,一统着整个 IT 业,一统着大楼把角高级办公室里 的那些 CEO、CFO、CTO、CIO 们(这些人都得让着 IBM 的高级销售三分)。但后来风向变了,新 公司以新的 IT 能力迎击挑战,出现了互联网时代的 4 骑士:Oracle、Cisco、EMC 和 Sun。4 骑士 如今变成了 3 个,不久后可能还要变为一个。Oracle 收购了 Sun,新的一轮观念转换开始了:摩 尔定律告诉人们说硬件的能力每 18 个月翻一番,但 Larry 的定律却说:“那不够快!”于是 Oracle 买下了 Sun,并在两年之后推出了 Sun 有史以来最快的硬件。作为新的 Sun“成员”,多线程 T4 芯片的速度是 T3 芯片的 5 倍,但那仅仅是硬件速度激增的开始(Oracle SuperCluster 机器有 4 台服
1 译者注:古希腊神话中的伊卡洛斯,借助蜡翼而升空;但因飞得过高,离太阳太近,蜡翼为太阳融化,坠海而死。 2 译者注:美国著名演员兼歌手,在“钢铁侠 2”中饰天才发明家东尼·史塔克。 3 IBM 是 International Business Machines Corporation 的缩写形式,其中的 Business 为“生意”之义。
绪 言 XXXV
务器,每台服务器由 4 片 T4 组成;每片 T4 有 8 核,每核有 8 个线程,总共有 1200 个线程)。新 的 SuperCluster 机器和 Exadata 产品线一起,无疑使我们快上至少几千倍!硬件能力每 18 个月才 翻一番的老黄历就不必再念下去了。有了 Exadata 扩展存储和压缩,可以将几百个这样的机柜串 联起来达到 8EB(当然得借助于压缩技术)。Oracle 和Sun 的结合还仅仅是个开始,有了新的 T4 Sparc 芯片,Exadata、Exalogic、Exalytics、StorageTek、PeopleSoft、Hyperion、TimesTen、MySQL、Java、 JD Edwards、Tangosol、BEA 及其他各路诸侯,好戏大概刚刚在开锣吧!
Oracle RDBMS 的发展史 1970 Edgar Codd 博士发表了关系数据模型的理论。 1977 Larry Ellison、Bob Miner、Ed Oates 和 Bruce Scott 以 2000 美元的启动资金组建了 Software Development Laboratories(SDL)。Larry 和 Bob 来自于 Ampex,他们当时正 负责一个代号为“Oracle”的美国中央情报局项目,Bob 和 Bruce 着手于数据库方面的工作。 1978 美国中央情报局是他们的首个客户,而该产品并未 在市场上发布。SDL 更名为 Relational Software Inc (RSI)。 1979 RSI 的首个商业版软件上市——以汇编语言写成 的版本 2 数据库(没有发布版本 1,因为担心人们不愿购买首 版的软件)。首个商业版的软件卖给了赖特帕特森空军基地, 那是市场上的首个商业 RDBMS。 1981 生产了首个工具 Interactive Application Facility (IAF),那是 Oracle SQL*Forms 工具的前身。 1982 RSI 更名为 Oracle Systems Corporation (OSC),接着又简化为 Oracle Corporation。 1983 发布了以 C 语言编写(这使得软件可移植)的第 3 个版本,Bob Miner 在支持基于汇编的 第 2 版软件的同时,写了一半的代码,而 Bruce Scott 则写了另外一半的代码,这是首个 32 位的 RDBMS。 1984 发布了版本 4,同时发布了最早的工具(IAG-genform、IAG-runform、RPT)。版本 4 是 首个具备读一致性的数据库。Oracle 被移植到了 PC 机上。 1985 发布了版本 5,有了最早的运行在 VMS/VAX 环境中的 Parallel Server 数据库。 1986 Oracle 于 3 月 12 日上市(Microsoft 上市的前一天,Sun 上市的后 8 天),股票以 15 美 元开盘,以 20.75 美元收市。这一年里还推出了 Oracle Client/Server,那是第一个客户端/服务器架 构的数据库。Oracle 5.1 版发布。 1987 Oracle 成为最大的 DBMS 公司。成立了 Oracle Applications 组,推出了首个 SMP(对称 多处理结构)数据库。 1987 Rich Niemiec、Brad Brown 和 Joe Trezzo 在 Oracle 工作期间,为 NEC 公司实施了首个 客户端/服务器架构下的生产环境应用程序,环境是运行 Oracle 软件的加强版 286 机器,上面有 16 个并发的客户端/服务器用户。 1988 发布 Oracle V6。首次有了行级锁,数据库热备份。Oracle 公司从 Belmont 搬到 Redwood Shores。推出了 PL/SQL。 1992 发布 Oracle V7。 1993 推出了 Oracle GUI 客户端/服务器开发工具,Oracle Applications 从字符模式转变为客 户端/服务器方式。
XXXVI Oracle Database 11gR2 性能调整与优化
1994 Bob Miner —— Oracle 数据库技术背后的天才,因患癌症去世。 1995 首次开发出了 64 位数据库。 1996 发布 Oracle 7.3。 1997 推出 Oracle 8 以及 Oracle 应用服务器,推出了 Web 应用程序。Oracle 是首个 Web 数 据库。为支持数据仓库而推出了 Discover 等 Oracle BI 工具。对工具提供 Java 本地化支持。 1998 主 RDBMS(Oracle 8)首次移植到 Linux 上,发布了 Application 11。Oracle 是首个支持 XML 的数据库。 1999 发布 Oracle 8i。将 Java/XML 集成到了开发工具中。Oracle 是首个有 Java 本地化支持 的数据库。 2000 推出了 Oracle 9i 应用服务器,这是首个带有中间层高速缓存的数据库。发布 E-Business Suite,基于 Oracle Mobile、Oracle 9i Application Sever Wireless 和 Internet File System (iFS)的无线数 据库。 2001 发布 Oracle 9i(9.1)。Oracle 是首个在真正应用集群(RAC)上运行的数据库。 2002 发布 Oracle 9i Release 2(9.2)。 2003 根据 Winter Group 的调查,在按规模而排在前 10 位的数据库中,法国电信局的 Oracle 数据库以 29TB 的规模而名列榜首。 2003 Oracle 10g 问世,专注于网格、加密备份、自动调整和 ASM。 2005 根据 Winter Group 的调查,Amazon 的 Oracle RAC 以 25TB 的规模跻身于按规模而排 名的 10 强数据库之列。 2005 Oracle 收购 PeopleSoft(包括 JD Edwards)、Oblix(身份管理解决方案)、Retek(零售软件, 花费 6.3 亿美元)、TimesTen(内存数据库)和 Innobase(InnoDB Open Source)公司。 2006 Oracle 收购 Siebel(花费 58 亿美元)、Sleepycat Software(开源软件)和 Stellant(内容管理) 公司。通过推动开源,Oracle 提供了对 Red Hat Linux“坚不可摧”的支持。 2006 Oracle 10g Release 2 问世于秋季(本书的前一版就是基于那一版本的数据库)。 2007 Oracle 花费 33 亿美元收购 Hyperion 公司。Oracle 11g 问世(2009 年发布了 11gR2)。 2008 Oracle 推出 Exadata 产品,收购 BEA。 2009 Oracle 发布 11gR2 版,收购 Sun(包括 Java、MySQL、Solaris、硬件、OpenOffice 和 StorageTek)。
2010 Oracle 推出 MySQL Cluster 7.1、Exadata X2-8 和 Exalogic、发布 11.2.0.2 版。 2011 Oracle 11gR2(11.2.0.4)发布(所有 Exadata 生产线全用 11gR2),Oracle 11g Express 版发 布(2011 年 9 月 24 日)。Oracle 推出 Exalytics、SuperCluster、Oracle Data Appliance、Exadata Expansion Rack 以及 Oracle Cloud 12c。 2014 预测发布 12cR2 版数据库。
绪 言 XXXVII
显然,Oracle 是在广度、能力和品格等诸方面都已经很成熟的公司,公司的领袖们已经无须 向腰包里塞入更多的钞票了(他们早就赚下了万贯家私)。他们有创新的能力,并总是聘请像 Larry Ellison 那样有远见的领袖,像 Bob Miner 那样不声不响的推动者,还有像 Bruce Scott 那样巨星级 的开发人员。从他们的每一位雇员身上总能找出诸如富于创意或富于改革精神等特殊的品质来, 他们聘用的都是独特的、聪明绝顶的、有强大推动力的和富有革新精神的人。从 Larry 的风格说 起吧,他有从人们身上挖掘潜力的能耐,而这样的潜力往往连人们自己都意识不到。待人们立下 了汗马之功,有功必赏也是 Larry 的能耐。Oracle 还拥有天才 Bob Miner,他的大丈夫气概和“蓝 领”般刻苦工作的精神激励着开发团队里所有追随他的人。Oracle 经营得出色,是因为有像 Safra Catz 和 Mark Hurd 那样的领导人均衡着各方面的工作,有总是以“量你也赶不上我们”的超高 速驱动营销的 Judith Sim,也有 Andy Mendelsohn 和他极具才智的团队,他们发明路上的弯道4, 保证了产品的成功交付。Thomas Kurian 和他日益壮大、成绩超众的团队在不断寻求着应用集成和 使企业更加成功的新途径,再有就是 Mary Ann Davidson 默默无声的安全性勇士们。还有更多我 不认识的人和记不起来的人(别忘了 Jenny、Mary Ann、Tania 和她的团队,他们像强力胶一样地把 一切黏合在一起)。 万维网走红以前,Oracle 就把一切都存到了万维网上,并且在 Linux 流行之前很久即重写了 在万维网上和在 Linux 应用服务器上运行的全部应用程序。“如果万维网不是下一个最好的好东 西,那我们就完蛋了。但如果它真是下一个最好的好东西,我们可就是金牌明星了!”新闻界闻知 Larry Ellison 这段关于万维网的评论后,大喜过望并立即引用。金子随着互联网的热潮滚滚而来, 在硅谷掀起了一波新的加州淘金热,Oracle 得以出售各种各样的掘金工具。但 10 年后,很多企业 却濒临破产。1929 年的股灾之后,破了产、等着被收购的公司俯拾皆是;是通用电气公司出头买 下了全部破了产的梦想和现金短缺的企业,使自己在随后的 80 年中像鹤立鸡群的巨人,至今仍然 延续着强势。在当今的经济不景气、无增长和物价上涨的情势下,是 Oracle 出头买下了 Sun(74 亿美元,硬件、Solaris、SPARC、Java、OpenOffice 和 StorageTek)、Hyperion(33 亿美元:为 CFO 量身打造的 EPM 仪表盘软件和 Essbase 数据库)、PeopleSoft(103 亿美元,财务及其他企业软件)、 Siebel(58.5 亿美元,CRM) 、JD Edwards( 制造业)、BEA(85 亿美元,中间件)、Sleepycat Software(BerkeleyDB,开源数据库)、Innobase(超快速数据库引擎)、TimesTen(内存数据库)、 Tangosol(一致性内存数据库和数据网格软件)、AmberPoint(SOA)、Stellant(4.4 亿美元,数字版权 管理和文档管理)、Pillar Data(智能硬件)、TripleHop(上下文 相关查找)、Fat Wire、Relsys( 药物安全和风险管理)、 Bharosa(网上身份偷窃和欺诈保护)、Demantra(需求驱动规 划)、Retek(零售解决方案)、Art Technology(10 亿美元,电 子商务软件)、IRI Software(OLAP)、Rdb(DEC 的分公司,数 据库)、Oblix(身份管理解决方案)、G-log(交通管理)、i-flex banking(5 亿美元)、Convergin(电信服务经纪人)、Loadstar(公 用事业应用软件)、SPL WorldGroup(物业计费和客户服务系 统),等等。还有很多(我所列的连一半都不到)。从本段文字 中您应该悟得出这样的道理来:赶紧教孩子们学 Oracle 吧, 因为在地球上存在的各行各业里,它都很吃香哩! Oracle 是要用那些收购的公司来一统传媒、知识和教育
4 译者注:赛车时,总是在弯道处把对手甩下。
XXXVIII Oracle Database 11gR2 性能调整与优化
吗?或许它会通过 Java 革新来进一步打动消费者,Java 正和 Oracle 数据库以同样的步调向前发展 着(全球共有 900 万 Java 开发人员,50 亿使用着的 Java 卡);大概只能通过像买进微软或苹果的更 大规模的收购,才能最终一统传媒、知识和教育。SAP、HP 乃至 IBM,它们会与为数已经越来 越少的大 IT 公司合并吗?Oracle 收购雅虎或许会导致与 Google 的竞赛,使二者都变得更为强大 (Google 或微软会不会首先收购雅虎呢?)。不管 Oracle 在下一轮收购谁、收购什么,它都注定要 加速格局的变化。我希望 Oracle 公有云和企业内部云能把我们大家的生活过渡到良好的稳定时期。 有了 Oracle 的 Exadata、Exalogic、Exalytics、SuperCluster 和所有其他的产品,局面一定会朝着能 够有效利用这些产品的人们的方向跃进。欲知眼下金子在何处?就在标着“X”的地方5。从 Exadata 入手,看看用 8EB 都可以搞出些什么名堂来吧! 在 Oracle 工作的日子里,我的心态发生了很多变化。上班的第一天,一进门我就明白了:少 于 10 倍的努力根本不行(随后我意识到需要百倍努力)。还没过几周我就得自编教材、给学生上培 训课了。刚上班时我连 Oracle 怎样拼写都不知道,但数不清的不眠之夜给我带来了成功,也让我 认识到自己居然有如此大的能量!大约 20 年前,在第一部著作的绪言里(本书是 20 年来最畅销调 优系列丛书的一部分),我写到了勇往直前,新动力,我还写了这动力将带动整个世界。而今的技 术发展正冲击着 20 年前我根本无法预想的高水平。
TUSC 最后,我想简要地介绍一下 TUSC(The Ultimate Software Consultants,终极软件资讯公司)。能和 TUSC 里强中之强、出类拔萃的同事们一起工作是我的幸运, 我们常被人们称作“海豹突击队”或“Oracle 领域里的 海军陆战队”(作为海军陆战队的前成员,我更喜欢后 者)。我们应召去世界各地的财富 500 强企业里解决各种 复杂的问题,而且始终不负众望。 随着全球化的趋势,增长比过去难了,未曾见过的境外低利率环境下的竞争比过去难了,连 仅求不遭淘汰都比过去难了。我们需要一个合作伙伴,或是合并到随全球化潮流而进的、有竞争 力的大企业中去。我们想找的是一家全球性的企业,即便在艰难的日子里,它也有推动我们在国 内外增长的能力;2008 年 1 月,我们幸运地被位于亚特兰大的 Rolta 国际公司收购了。Rolta 国际 为 Rolta 印度有限公司(它的母公司)监管美国、欧洲和大部分亚洲,Rolta 印度有限公司是位于孟 买的全球性国防工程和地理信息系统承包商。Rolta 使我们继续占有一席之地,给我们带来了遍布 于世界各地的客户、有竞争力的价格和全球化经济中的前程。在 Rolta,人们最在意的是自己做什 么事和周围有什么样的人。在 Rolta,业绩至上,工作第一。不久,我获升迁,负责 Rolta 的国际 企业 IT 解决方案(EITS)组。该组在全公司大约有 1000 人,而我的职责主要是在全球范围内传播 Oracle 的消息,并集中精力于利用 Rolta TUSC 的品牌。第二年,在收购了 WhittmanHart 咨询公 司和 Piocon 两家企业之后,我们得到了很多优秀的新员工。事实上,WhittmanHart 咨询公司于多 年间已经购下了若干“珍品”,并且在 Oracle Applications、Fusion 和数据库管理方面有好几位来 自于 Oracle 的专业人士。他们还收购了 Infinis—— 一家在 Hyperion EPM 方面很红火的公司 (Hyperion 年度合作伙伴),这使我们获得了在 Oracle 已经收购的一个领域中的经验。Piocon 是 Oracle 在 BI 领域里的打头人之一,他们获得过两次 Oracle 年度合作伙伴的奖励,而我们获得过 4 次(到 2011 年为止 Rolta 获得过 8 次了)。我们在不断地改变着,虽然很痛苦,但也使我们在 Oracle
5 译者注:X 是 Exadata 发音时的第一个音节。
绪 言 XXXIX
的疆域里变得强大而广博。只不过,多年来的国际旅行快要把我累垮了,我去过了澳大利亚、奥 地利、比利时、加拿大、中国、捷克共和国、丹麦、芬兰、印度、爱尔兰、德国、卢森堡、墨西 哥、波兰、斯洛伐克、西班牙、瑞典、阿联酋和英国;所以我最近改变职务做了 Rolta 国际董事 会的顾问,这一角色将使我有多得多的时间动手做技术和讲课,而且会减少我的国际旅行。 海军陆战队的同伴们:“Semper Fi”6所有的军人和妇女,保卫自由的政府工作人员和机构: 感谢你们使世界变得更加安全和美好。海军陆战队总是训教我:上帝、家庭、国家和军团,还有 做人的金科玉律,但绝不是那种“谁有钱就由谁来立规矩”的金科玉律,而是“爱人如己”的真 正的金科玉律。这两种不同的金科玉律,在某种程度上使华尔街最丑恶的价值观和老百姓最美好 的价值观形成了对比。虽然做起来很难,爱人如己却会使您在未来的人生路上获得丰厚的报偿; 可能经历艰难困苦,但它一定会引领您到超越生命的更美好的地方去,而这就是当面对充满挑战 的未来时,我能给您的最好建议了。
本书的组织架构和本版中的更新
如果通读全书并应用其内容,您将跻身于最顶尖 1% Oracle 调优专家的行列。有 400 多位调 优专家为本书增添过内容。对于阅读过本书前一版的读者来说,本书的各章节做了如下的改动和 增补: ● 第 1 章: 为主要的 11gR2 新功能而全部重写过 ● 第 2 章:为包括全部索引类型做了扩展,并为 11gR2 做了测试 ● 第 3 章: 为 11gR2 而更新了 ASM、LMT、Auto UNDO,改善了 I/O 部分 ● 第 4 章:为 11gR2 而添加了 MEMORY_TARGET,并更新了初始化参数 ● 第 5 章:添加了 11g 屏幕截图、Grid Control 以及 Exadata 的一些内容 ● 第 6 章:更新了 EXPLAIN PLAN、SQL 计划管理、DBMS_MONITOR 以及 TRCSESS ● 第 7 章:添加了新“提示(hint)”并更新了其他“提示”,这是最佳的“提示”资源 ● 第 8 章 :为 11gR2 作过更新,添加了结果集缓存(Result Cache)和 SQL 性能分析器(SQL Performance Analyzer) ● 第 9 章:为 11gR2 作过更新和测试,更新了块调优并添加了 DB Replay ● 第 10 章:因为 PL/SQL 调优的扩展而再次扩展,添加了 11gR2 的变化 ● 第 11 章: 添加了 Exadata,改进了 RAC,并且更新了 Parallel Query 操作的内容 ● 第 12 章:为展现更多的 V$视图查询而再次扩展,特别是针对 11gR2 中的新 V$视图 ● 第 13 章:扩展了 X$视图查询、trace 部分和 X$命名方法部分 ● 第 14 章:为 11gR2 而更新了 AWR 和 Statspack 的内容,添加了 mutex 和块调优的内容 ● 第 15 章:为 11gR2 和大系统而做了更新 ● 第 16 章:关于 UNIX 的这一章作了更新,以包含更多的命令 ● 附录 A:为 11gR2 查询和最重要的 25 个初始化参数而做了更新 ● 附录 B:为 11gR2 而更新了 V$视图查询 ● 附录 C:为 11gR2 而更新了 X$查询
6 译者注:拉丁语,意为“永远忠诚”,作为美国海军陆战队官兵的格言而为美国大众所熟知。
XL Oracle Database 11gR2 性能调整与优化
参考文献
Mark Harris, “Wish you were here,” Daywind, 2006. Donita Klement, History of Oracle, 1999. Rich Niemiec, “Retrospective: Still Growing After All These Years,” Oracle Magazine, 2001. Rich Niemiec, “Rich Niemiec Interviews Bruce Scott,” Select Magazine, 2001. Rich Niemiec, “64-Bit Computing,” Oracle Magazine, 2004. Lee Strobel, the Case for a Creator, Illustra Media, 2006. 维基百科网站:en.wikipedia.com(Googol, Exabyte)。 Mike Wilson, The Difference between God and Larry Ellison, William Morrow, November 1998. 网站:www.oracle.com、www.tusc.com 和 www.rolta.com。
目 录
...... 第 1 章 11g R1 & R2 新特性介绍(针对 1.7.6 增强的数据泵压缩 15 ...... DBA 和开发者) ...... 1 1.7.7 数据泵加密 Dump 文件集 16 数据泵的传统模式 ...... 1.1 轮到 Exadata 出场了!...... 3 1.7.8 16 增强了的统计信息...... 1.2 高级压缩...... 6 1.8 16 ...... 1.3 自动诊断信息库(Automatic 1.8.1 增强了的 I/O 统计信息 16 Diagnostic Repository,ADR) ...... 7 1.8.2 减少收集分区对象的统计 ...... 1.4 自动共享内存管理(Automatic 信息 16 ...... Shared Memory Management, 1.8.3 待定统计信息 17 ...... ASMM)的改进...... 8 1.8.4 多列统计信息 17 ...... 1.5 ASM 的改进...... 9 1.8.5 表达式统计信息 17 1.5.1 从 ASM 首选镜像读取 ...... 10 1.9 闪回数据归档(Flashback Data ...... 1.5.2 滚动升级/打补丁 ...... 10 Archive,FBDA) 18 1.5.3 更快的重新平衡...... 11 1.10 健康监控器(Health Monitor) ...... 18 1.5.4 ASM 磁盘组兼容性...... 11 1.11 事件打包服务(Incident Packaging 1.5.5 ASMCMD 命令扩展 ...... 12 Service,IPS)...... 21 1.6 自动 SQL 优化...... 12 1.12 不可视索引(invisible index) ...... 22 1.7 数据卫士的增强...... 13 1.13 分区新特性...... 22 1.7.1 快照备用(Snapshot Standby)...... 14 1.13.1 区间分区...... 23 1.7.2 活动数据卫士...... 14 1.13.2 REF 分区 ...... 23 1.7.3 混合平台支持...... 15 1.13.3 系统分区...... 25 1.7.4 高级压缩支持逻辑备用 1.13.4 虚拟列分区 ...... 26 ...... 数据库(11gR2) 15 1.13.5 分区顾问...... 26 1.7.5 透明数据加密支持逻辑备用 1.14 只读表...... 26 数据库 ...... 15
XLII Oracle Database 11gR2 性能调整与优化
1.15 RAC One Node 和 RAC Patching... 27 2.2 不可视索引...... 52 1.16 真正应用测试(Real Application 2.3 组合索引...... 55 Testing,RAT) ...... 28 2.4 索引抑制...... 56 1.17 SQL 性能分析器(SQL 2.4.1 使用不等于运算符(<>、!=)...... 56 Performance Analyzer,SPA)...... 29 2.4.2 使用 IS NULL 或 IS NOT 1.18 结果集缓存(Result Cache) ...... 29 NULL ...... 57 1.19 RMAN 的新特性 ...... 30 2.4.3 使用 LIKE...... 58 1.19.1 备份的优化...... 30 2.4.4 使用函数...... 59 1.19.2 长期备份处理的改进...... 30 2.4.5 比较不匹配的数据类型...... 59 1.19.3 并行备份巨大的数据文件.....30 2.5 选择性...... 60 1.19.4 更快的备份压缩 2.6 集群因子...... 60 (改进的压缩)...... 31 2.7 二元高度(Binary Height) ...... 61 1.19.5 活动数据库复制(Active 2.8 使用直方图...... 64 Database Duplication) ...... 31 2.9 快速全扫描...... 65 1.19.6 更好的恢复目录管理...... 32 2.10 跳跃式扫描...... 66 1.19.7 增强的归档日志删除策略.....32 2.11 索引的类型...... 67 1.19.8 数据恢复顾问(Data Recovery 2.11.1 B 树索引...... 67 Advisor)...... 32 2.11.2 位图索引...... 68 1.19.9 虚拟专用目录 ...... 35 2.11.3 哈希索引...... 70 1.19.10 主动的健康检查 ...... 36 2.11.4 索引组织表...... 71 1.19.11 块恢复(闪回日志)...... 37 2.11.5 反键索引...... 71 1.19.12 块恢复(物理备用)...... 37 2.11.6 基于函数的索引 ...... 72 1.20 安全文件...... 37 2.11.7 分区索引...... 73 1.20.1 压缩 ...... 38 2.11.8 位图连接索引 ...... 75 1.20.2 加密 ...... 38 2.12 快速重建索引 ...... 76 1.20.3 重复数据删除 ...... 38 2.13 在线重建索引 ...... 76 1.21 流(GoldenGate 是流的未来)的 2.14 要诀回顾...... 77 增强...... 40 2.15 参考文献...... 78 1.21.1 XStream In ...... 40 第 3 章 磁盘安装启用的方法和 ASM 1.21.2 XStream Out...... 40 (针对 DBA)...... 81 1.21.3 流支持高级压缩(11gR2)...... 40 3.1 磁盘阵列:必然之选...... 82 1.22 临时表空间的收缩 ...... 40 3.1.1 使用磁盘阵列改进性能和 1.23 透明数据加密(TDE)的改进 ...... 41 可用性...... 82 1.24 11g 新的后台进程 ...... 41 3.1.2 所需的磁盘数量 ...... 83 1.25 版本对照表...... 42 3.1.3 可用的 RAID 级别 ...... 83 1.26 新特性回顾...... 47 3.1.4 更新的 RAID 5...... 84 1.27 参考文献...... 48 3.2 传统文件系统的安装和维护 ...... 85 第 2 章 索引基本原理(针对 DBA 和 3.3 在硬件磁盘之间分布关键数据 初级开发人员) ...... 49 文件 ...... 85 2.1 索引基本概念...... 50 3.3.1 分开存储数据和索引文件...... 86
目 录 XLIII
3.3.2 避免 I/O 磁盘争用 ...... 87 3.8 导出分区...... 120 3.3.3 通过移动数据文件来均衡 3.9 消除碎片...... 120 文件 I/O...... 88 3.9.1 使用正确的区大小 ...... 121 3.4 本地管理的表空间 ...... 89 3.9.2 创建新的表空间并把数据移 3.4.1 创建本地管理的表空间...... 89 到其中...... 121 3.4.2 把字典管理的表空间迁移到 3.9.3 导出和重新导入表 ...... 123 本地管理的表空间 ...... 90 3.9.4 正确设定 PCTFREE 以避免 3.4.3 Oracle 大文件表空间...... 90 链化(Chaining)现象...... 123 3.4.4 Oracle 管理文件...... 91 3.9.5 重建数据库...... 125 3.5 ASM 简介 ...... 92 3.10 增加日志文件尺寸和 3.5.1 IT 部门内各个角色之间的 LOG_CHECKPOINT_ INTERVAL 沟通 ...... 93 以提高速度 ...... 125 3.5.2 ASM 实例 ...... 93 3.10.1 确定重做日志文件的 3.5.3 ASM 初始化参数...... 95 大小是否存在问题...... 126 3.5.4 ASM 的安装...... 95 3.10.2 确定日志文件的大小和 3.5.5 ASM 初始化参数和 SGA 调整....96 检查点的时间间隔...... 126 3.5.6 ASM 和权限...... 96 3.11 快速恢复区(Fast Recovery Area, 3.5.7 ASM 磁盘 ...... 97 FRA)...... 128 3.5.8 ASM 和多路径...... 99 3.12 增加恢复的可能性:在每次 3.5.9 ASM 磁盘组...... 99 批处理后提交 ...... 129 3.5.10 ASM 磁盘组和数据库 ...... 101 3.12.1 把大的事务隔离到它们 3.5.11 ASM 冗余和故障组...... 102 自己的回滚段上...... 129 3.5.12 新的空间相关列 ...... 103 3.12.2 使用 UNDO 表空间...... 130 3.5.13 集群同步服务...... 104 3.12.3 监控 UNDO 空间 ...... 131 3.5.14 数据库实例和 ASM ...... 105 3.12.4 结束有问题的会话...... 131 3.5.15 使用 ASM 进行数据库整合 3.13 在不同磁盘和控制器上存放 和集群化...... 105 多个控制文件 ...... 132 3.5.16 支持 ASM 的数据库进程...... 106 3.14 磁盘 I/O 的其他注意事项 3.5.17 大文件和 ASM...... 106 和提示...... 133 3.5.18 支持 ASM 的数据库初始化 3.15 设计阶段需要注意的问题 ...... 133 参数 ...... 107 3.16 要诀回顾...... 134 3.5.19 ASM 和数据库部署最佳 3.17 参考文献...... 135 实践 ...... 107 第 4 章 通过初始化参数调优数据库 3.5.20 ASM 存储管理和分配 ...... 108 (针对 DBA) ...... 137 3.5.21 ASM 重新平衡和重新分布.....108 4.1 升级到 Oracle 11gR2 之后 ...... 138 3.6 使用分区来避免磁盘争用...... 110 4.2 识别重要的初始化参数...... 141 3.6.1 获得关于分区的更多信息...... 112 4.3 在不重启数据库的情况下修改 3.6.2 其他类型的分区...... 112 初始化参数...... 143 3.6.3 Oracle 11gR2 的新分区选项....115 4.4 通过 Oracle 实用程序洞察 3.6.4 其他分区选项...... 117 初始化参数...... 149 3.7 使用索引分区...... 119
XLIV Oracle Database 11gR2 性能调整与优化
4.5 用企业管理器查看初始化参数 ...150 4.12 修改 SGA 大小以避免换页 4.6 优化 DB_CACHE_SIZE 来提高 (Paging)和交换(Swapping)...... 170 性能 ...... 151 4.13 了解 Oracle 优化器 ...... 170 4.6.1 使用 V$DB_CACHE_ADVICE 4.14 创建足够的调度程序 优化 DB_CACHE_SIZE...... 153 (Dispatcher)...... 171 4.6.2 保持数据缓存命中率 4.14.1 足够的打开的游标 超过 95%...... 153 (OPEN_CURSORS) ...... 172 4.6.3 监控 V$SQLAREA 视图以 4.14.2 不要让 DDL 语句失败 查找较慢的查询 ...... 153 (使用 DDL 锁超时机制) ....172 4.7 设定 DB_BLOCK_SIZE 来反映 4.15 两个重要的 Exadata 初始化参数 数据读的大小...... 156 (仅针对 Exadata) ...... 172 4.8 把 SGA_MAX_SIZE 设置为 4.16 25 个需要深思熟虑的重要 主内存大小的 25%到 50%...... 157 初始化参数 ...... 173 4.9 优化 SHARED_POOL_SIZE 以 4.16.1 历年的初始化参数...... 175 获取最佳性能...... 158 4.16.2 查找未公开的初始化参数....176 4.9.1 使用存储过程来优化共享 4.17 理解典型的服务器...... 176 SQL 区域的使用...... 158 4.17.1 典型服务器的建模...... 177 4.9.2 设定足够大的 SHARED_ 4.17.2 Oracle Application 数据库 POOL_SIZE 以保证充分 选型...... 178 利用 DB_CACHE_SIZE ...... 160 4.18 要诀回顾...... 179 4.9.3 保证数据字典缓存命中率 4.19 参考文献...... 180 至少为 95% ...... 160 第 5 章 企业管理器和网格控制器 4.9.4 保证库缓存的重载率为 0, (针对 DBA 和开发人员)...... 183 并使命中率在 95%以上...... 161 5.1 企业管理器(EM)基础 ...... 185 4.9.5 使用可用内存来判断 5.2 从 All Targets 和其他分组开始.... 187 SHARED_POOL_SIZE 是否 5.3 SQL 性能分析器(SPA)...... 188 设置正确...... 164 5.4 ADDM ...... 191 4.9.6 使用 X$KSMSP 表详细观察 5.4.1 “数据库实例服务器”选项卡 共享池 ...... 164 和“数据库管理”选项卡...... 196 4.9.7 关于缓存大小需要记住的 5.4.2 “数据库实例服务器”选项卡: 要点 ...... 165 表空间...... 197 4.9.8 与初始化参数相关的等待...... 166 5.4.3 “数据库实例服务器”选项卡: 4.10 在 Oracle 中使用多个缓冲池.....167 聚焦实例级别 ...... 198 4.10.1 与 DB_CACHE_SIZE 相关 5.4.4 “数据库实例服务器”选项卡: 并为数据分配内存的池 ...... 167 所有初始化参数 ...... 199 4.10.2 修改 LRU 算法 ...... 168 5.4.5 “数据库实例服务器”选项卡: 4.10.3 与 SHARED_POOL_SIZE 相 管理优化器统计 ...... 200 关并为语句分配内存的池 ....168 5.4.6 “数据库实例服务器”选项卡: 4.11 调整 PGA_AGGREGATE_TARGET 资源管理器(消费者组) ...... 202 以优化内存的使用...... 169 5.4.7 “数据库维护”选项卡...... 203
目 录 XLV
5.4.8 “数据库拓扑”选项卡...... 203 6.7 参考文献...... 269 5.4.9 “数据库性能”选项卡...... 204 第 7 章 基本的提示语法(针对开发人员 5.5 监控主机...... 211 和 DBA)...... 271 5.6 监控应用服务器...... 213 7.1 最常用的提示 ...... 272 5.7 监控 Web 应用程序...... 216 7.1.1 慎用提示...... 273 5.8 SQL 顾问(SQL Advisors) ...... 218 7.1.2 首先修正设计方案 ...... 273 5.9 Deployments 选项卡(补丁选项).....219 7.2 可用提示及归类 ...... 274 5.10 调度中心和 Jobs 选项卡...... 220 7.2.1 执行路径提示...... 274 5.11 Reports 选项卡 ...... 221 7.2.2 访问方法提示...... 275 5.12 ASM(自动存储管理)的性能 ...... 223 7.2.3 查询转换提示...... 275 5.13 真正应用测试(数据库回放)...... 225 7.2.4 连接操作提示...... 275 5.14 Exadata 的企业管理器 ...... 226 7.2.5 并行执行提示...... 276 5.15 小结 ...... 227 7.2.6 其他提示...... 276 5.16 要诀回顾...... 228 7.3 指定提示...... 276 5.17 参考文献...... 228 7.4 指定多个提示 ...... 278 第 6 章 使用 EXPLAIN PLAN 和 SQL 计划 7.5 使用别名时,提示别名而非 管理(针对开发人员和 DBA)...... 229 表名...... 278 6.1 Oracle 的 SQL 跟踪(SQL Trace) 7.6 提示 ...... 278 实用工具...... 230 7.6.1 Oracle 的演示样板: 6.1.1 对简单查询使用 SQL 跟踪的 HR 方案 ...... 279 简单步骤...... 230 7.6.2 FIRST_ROWS 提示 ...... 279 6.1.2 TRACE 输出部分 ...... 234 7.6.3 ALL_ROWS 提示...... 280 6.1.3 深入探讨 TKPROF 输出 ...... 236 7.6.4 FULL 提示...... 280 6.2 使用 DBMS_MONITOR...... 238 7.6.5 INDEX 提示 ...... 281 6.3 单独使用 EXPLAIN PLAN...... 242 7.6.6 NO_INDEX 提示...... 282 6.3.1 EXPLAIN PLAN——自顶而下 7.6.7 INDEX_JOIN 提示...... 283 还是从下往上读 ...... 245 7.6.8 INDEX_COMBINE 提示...... 284 6.3.2 EXPLAIN PLAN 的另一种 7.6.9 INDEX_ASC 提示...... 284 输出方法:构建树结构...... 250 7.6.10 INDEX_DESC 提示 ...... 285 6.3.3 使用执行树的另一个例子...... 251 7.6.11 INDEX_FFS 提示...... 285 6.3.4 在开发者产品中利用跟踪 7.6.12 ORDERED 提示 ...... 286 /EXPLAIN 发现有问题的 7.6.13 LEADING 提示 ...... 287 查询 ...... 254 7.6.14 NO_EXPAND 提示...... 287 6.3.5 PLAN_TABLE 表中的 7.6.15 DRIVING_SITE 提示 ...... 288 重要列 ...... 254 7.6.16 USE_MERGE 提示 ...... 289 6.3.6 未公开的跟踪初始化参数...... 255 7.6.17 USE_NL 提示 ...... 290 6.4 使用 STORED OUTLINES 7.6.18 USE_HASH 提示...... 291 (存储纲要) ...... 257 7.6.19 QB_NAME 提示...... 292 6.5 使用 SPM (11g 新特性)...... 259 7.6.20 PUSH_SUBQ 提示...... 292 6.6 要诀回顾...... 267 7.6.21 PARALLEL 提示...... 293
XLVI Oracle Database 11gR2 性能调整与优化
7.6.22 NO_PARALLEL 提示...... 294 8.3 何时应该使用索引...... 315 7.6.23 PARALLEL_INDEX 提示.....294 8.4 忘记了索引怎么办...... 316 7.6.24 PQ_DISTRIBUTE 提示 ...... 295 8.4.1 建立索引...... 316 7.6.25 APPEND 提示...... 296 8.4.2 不可视索引(invisible index).....317 7.6.26 NOAPPEND 提示...... 296 8.4.3 查看表上的索引 ...... 317 7.6.27 CACHE 提示...... 297 8.4.4 在列上正确建立索引了吗?.....318 7.6.28 NOCACHE 提示...... 297 8.5 建立了差的索引怎么办...... 318 7.6.29 RESULT_CACHE 提示...... 298 8.6 删除索引时保持谨慎...... 321 7.6.30 CURSOR_SHARING_EXACT 8.7 在 SELECT 和 WHERE 子句中 提示 ...... 298 的列上建立索引 ...... 321 7.7 杂项提示及注意事项 ...... 299 8.8 使用索引快速全扫描...... 323 7.7.1 未公开的提示...... 300 8.9 使查询“魔术”般加速...... 325 7.7.2 如何在视图中使用提示...... 301 8.10 在内存中缓存表 ...... 326 7.7.3 关于提示和 STORED 8.11 使用 11g 新引入的结果集缓存 OUTLINES(11g 中的 SPM)的 (Result Cache)...... 327 注意事项...... 301 8.12 在多个索引间选择(使用选择性 7.8 提示为什么不起作用 ...... 302 最佳的索引)...... 328 7.9 提示一览...... 302 8.13 索引合并...... 329 7.10 要诀回顾...... 303 8.14 可能被抑制的索引...... 331 7.11 参考文献 ...... 305 8.15 基于函数的索引 ...... 333 8.16 虚拟列(Virtual Column) ...... 334 第 8 章 查询优化(针对开发人员和 8.17 “古怪”的 OR...... 334 初级 DBA)...... 307 8.18 使用 EXISTS 函数和嵌套 8.1 应该优化哪些查询?查询 子查询...... 336 V$SQLAREA 和V$SQL 视图 ...... 308 8.19 表就是视图...... 337 8.1.1 从 V$SQLAREA 视图中选出 8.20 SQL 和“大一统”理论...... 337 最糟糕的查询...... 308 8.21 Oracle Database 11g 中的 8.1.2 从 V$SQL 视图中选出最糟糕 优化变化 ...... 337 的查询 ...... 310 8.22 Oracle 11g 自动 SQL 优化 ...... 338 8.2 使用 Oracle 11g 视图定位占用 8.22.1 保证执行优化操作的用户 大量资源的会话和查询...... 311 能访问 API...... 338 8.2.1 从 V$SESSMETRIC 视图中 8.22.2 创建优化任务...... 338 选出当前最占用资源的会话....311 8.22.3 确定从顾问日志中可以 8.2.2 查看可用的 AWR 快照...... 312 查看到任务...... 339 8.2.3 从 DBA_HIST_SQLSTAT 视图 8.22.4 执行 SQL 优化任务...... 339 中发现最糟糕的查询 ...... 312 8.22.5 查看优化任务的状态 ...... 339 8.2.4 从 DBA_HIST_SQLSTAT 视图 8.22.6 显示 SQL 优化顾问生成的 中选择查询文本 ...... 313 报告 ...... 340 8.2.5 从 DBA_HIST_SQL_PLAN 8.22.7 检查报告输出...... 340 视图中选出查询 8.23 使用 SQL 优化顾问自动优化 EXPLAIN PLAN...... 314 SQL 语句...... 342
目 录 XLVII
8.23.1 启用自动 SQL 优化顾问....342 9.12 第三方产品性能优化...... 395 8.23.2 配置自动 SQL 优化顾问....343 9.13 优化分布式查询 ...... 398 8.23.3 查看自动 SQL 优化的 9.14 一切就绪...... 400 结果...... 343 9.15 其他优化技术 ...... 401 8.24 使用 SPA...... 347 9.15.1 外部表...... 401 8.25 要诀回顾...... 352 9.15.2 数据快照太旧(Snapshot 8.26 参考文献...... 353 Too Old):开发人员的 编程问题 ...... 405 第 9 章 表连接和其他高级优化(针对 9.15.3 设置事件以转储每次等待....406 高级 DBA 和开发人员)...... 355 9.15.4 从 14 小时到 30 秒—— 9.1 RAT...... 357 EXISTS 操作符 ...... 407 9.2 SPA ...... 362 9.16 在块级别进行优化(高级内容).... 409 9.2.1 创建 SQL 优化集...... 363 9.16.1 数据块转储中的关键部分....412 9.2.2 创建分析任务...... 363 9.16.2 索引块转储简介...... 418 9.2.3 执行分析任务...... 364 9.17 使用简单的数学方法进行优化 ... 420 9.2.4 查询性能分析的顾问任务...... 365 9.17.1 传统的数学分析...... 421 9.2.5 取消正在执行的 SPA 分析 9.17.2 7 步方法论 ...... 421 任务 ...... 365 9.17.3 模式分析...... 426 9.2.6 删除 SPA 分析任务...... 365 9.17.4 数学方法总结 ...... 431 9.2.7 确定活动的 SQL 优化集 ...... 365 9.18 连接优化:关系模型与对象 9.2.8 删除 SQL 优化集引用...... 366 关系模型的性能对比...... 431 9.2.9 删除 SQL 优化集...... 366 9.18.1 使用的模型 ...... 433 9.3 连接方法...... 367 9.18.2 结果...... 433 9.3.1 嵌套循环连接...... 367 9.18.3 总结...... 441 9.3.2 排序合并连接...... 368 9.19 要诀回顾...... 443 9.3.3 集群连接...... 369 9.20 参考文献...... 444 9.3.4 哈希连接...... 369 9.3.5 索引合并连接...... 371 第 10 章 使用 PL/SQL 提升性能 9.4 表连接相关的初始化参数...... 373 (针对开发人员和 DBA) ...... 447 9.5 双表连接:等尺寸表(基于成本)...374 10.1 利用 PL/SQL 函数结果集缓存 9.6 双表索引连接:等尺寸表 提升性能(11g 新特性) ...... 449 (基于成本) ...... 377 10.2 直接在 PL/SQL 表达式中引用 9.7 强制使用特定的连接方法...... 381 序列(11g 新特性)...... 458 9.8 排除多表连接中的连接记录 10.3 在 SQL 函数调用中使用命名 (候选行) ...... 383 参数(11g 新特性)...... 461 9.9 大小不同的表间的双表连接...... 384 10.4 使用 CONTINUE 语句简化 9.10 三表连接:不那么有趣...... 387 循环(11g 新特性)...... 463 9.11 位图连接索引...... 389 10.5 利用编译时警告捕捉编程 9.11.1 位图索引...... 389 错误(11g 增强特性)...... 466 9.11.2 位图连接索引 ...... 390 10.6 使用表触发器(11g 增强特性).... 468 9.11.3 位图连接索引的最佳应用....392
XLVIII Oracle Database 11gR2 性能调整与优化
10.7 使用本地编译提升性能 10.26 理解 PL/SQL 对象定位的含义....511 (11g 增强特性) ...... 473 10.27 使用回滚段打开大型游标 ...... 512 10.8 使用优化的编译器使性能最优 10.28 使用数据库临时表提高性能 .... 514 (11g 增强特性) ...... 476 10.29 限制动态 SQL 的使用...... 515 10.9 使用 DBMS_APPLICATION_ 10.30 使用管道表函数建立复杂的 INFO 包进行实时监控...... 481 结果集...... 515 10.10 在数据库表中记录计时信息 ...483 10.31 别管调试命令 ...... 520 10.11 减少 PL/SQL 程序的单元迭代 10.32 “跟着感觉走”:为初学者准备 数量和迭代时间 ...... 485 的例子...... 525 10.12 使用 ROWID 进行迭代处理....488 10.32.1 PL/SQL 示例...... 526 10.13 将数据类型、IF 条件排序和 10.32.2 创建过程的例子...... 526 PLS_INTEGER 标准化...... 490 10.32.3 从 PL/SQL 中执行过程的 10.13.1 确保比较运算中的数据 例子...... 527 类型相同...... 490 10.32.4 创建函数的例子...... 527 10.13.2 根据条件出现的频率来 10.32.5 在 SQL 中执行 排序 IF 条件...... 492 get_cust_name 函数...... 527 10.13.3 使用 PL/SQL 数据类型 10.32.6 创建程序包 ...... 527 PLS_INTEGER 进行整数 10.32.7 在数据库触发器中 运算...... 492 使用 PL/SQL...... 528 10.14 减少对 SYSDATE 的调用...... 493 10.33 要诀回顾...... 528 10.15 减少 MOD 函数的使用 ...... 495 10.34 参考文献...... 530 10.16 通过固定 PL/SQL 对象提升 第 11 章 Exadata、RAC 调优和并行 共享池的使用...... 496 特性的使用 ...... 531 10.16.1 将 PL/SQL 对象语句固定 11.1 Exadata 术语和基础知识...... 533 (缓存)到内存中...... 497 11.2 Exadata 详细信息 ...... 534 10.16.2 固定所有的包 ...... 497 11.3 Exadata 存储扩展柜简介...... 536 10.17 识别需要固定的 PL/SQL 11.4 Exalogic 简介 ...... 536 对象 ...... 498 11.5 智能扫描(Smart Scan)...... 537 10.18 使用和修改 DBMS_SHARED_ 11.6 闪存(Flash Cache)...... 537 POOL.SIZES ...... 498 11.7 存储索引(Storage Indexes)...... 540 10.19 从 DBA_OBJECT_SIZE 中 11.8 混合列压缩(11.2 新特性) ...... 541 获取详细的对象信息...... 500 11.9 IORM...... 542 10.20 发现无效对象...... 500 11.10 在 Exadata 中使用所有的 10.21 发现已禁用的触发器...... 502 Oracle 安全优势...... 542 10.22 将 PL/SQL 关联数组用于快速 11.11 最佳实践...... 542 参考表查询 ...... 503 11.12 小结: Exadata=根本性改变!..... 543 10.23 查找和优化所使用对象的 11.13 Oracle Database Appliance ...... 544 SQL ...... 506 11.14 SPARC SuperCluster...... 544 10.24 在处理 DATE 数据类型时 11.15 Oracle Exalytics 商业智能 使用时间组件 ...... 508 一体机...... 545 10.25 使用 PL/SQL 优化 PL/SQL...... 511
目 录 XLIX
11.16 其他可以考虑的 Oracle 硬件 ....546 11.33.1 并行操作的目标 ...... 595 11.16.1 Oracle 大数据设备...... 546 11.33.2 RAC 并行使用模型...... 595 11.16.2 ZFS 存储服务器 ...... 546 11.33.3 init.ora 参数...... 596 11.16.3 Pillar 存储系统...... 546 11.33.4 查看并行统计数据的 11.16.4 StorageTek 模块化磁带库 V$视图...... 596 系统...... 546 11.33.5 并行配置和相关基线 11.17 Oracle 公共云和 Oracle 社交 测试...... 596 网络 ...... 547 11.33.6 并行查询测试示例 ...... 597 11.18 并行数据库...... 547 11.33.7 Create Table As ...... 599 11.19 RAC ...... 548 11.33.8 建立索引...... 599 11.20 RAC 性能优化概述...... 552 11.33.9 性能注意事项和小结 ...... 600 11.20.1 RAC 集群互连的性能...... 553 11.34 其他的并行操作注意事项...... 600 11.20.2 寻找 RAC 等待事件—— 11.35 Oracle 的联机文档 ...... 600 会话等待...... 553 11.36 要诀回顾...... 601 11.20.3 RAC 等待事件和互联 11.37 参考文献...... 602 统计信息...... 554 第 12 章 V$视图(针对开发人员和 DBA)....605 11.20.4 集群互连优化—— 12.1 创建和授权访问 V$视图...... 606 硬件层 ...... 560 12.2 获取构建 V$视图的 X$脚本 11.20.5 使用企业管理器网格 列表...... 610 控制器优化 RAC ...... 565 12.3 使用有帮助的 V$脚本...... 614 11.21 并行操作的基本概念 ...... 570 12.3.1 基本的数据库信息 ...... 614 11.22 并行 DML 语句和操作...... 572 12.3.2 AWR(自动负载资料库)的 11.23 管理并行服务器资源和 基本信息...... 615 并行语句排队...... 573 12.3.3 基本的版权信息...... 616 11.24 并行度和分区...... 573 12.3.4 数据库中已安装的选项...... 617 11.25 操作内并行和操作间并行...... 574 12.4 内存分配概要(V$SGA)...... 619 11.26 使用并行操作创建表和 12.4.1 AMM(自动内存管理)与 索引的示例...... 576 MEMORY_TARGET 参数...619 11.27 并行 DML 语句和示例...... 578 12.4.2 详尽的内存分配 11.27.1 并行 DML 的约束条件.....578 (V$SGASTAT)...... 621 11.27.2 并行 DML 语句示例 ...... 579 12.5 在 V$PARAMETER 视图里找出 11.28 通过 V$视图监控并行操作...... 580 spfile.ora/init.ora 参数设置 ...... 622 11.28.1 V$PQ_TQSTAT 视图 ...... 580 12.6 判定数据的命中率(V$SYSSTAT 和 11.28.2 V$PQ_SYSSTAT 视图 ...... 581 V$SYSMETRIC)...... 623 11.28.3 V$PQ_SESSTAT 视图...... 584 12.7 判定数据字典的命中率 11.29 在并行操作中使用 EXPLAIN (V$ROWCACHE)...... 625 PLAN 和AUTOTRACE...... 585 12.8 判定共享 SQL 和 PL/SQL 的 11.30 优化并行执行和初始化参数....589 命中率(V$LIBRARYCACHE).... 625 11.31 并行加载...... 592 12.9 确定需要保留在内存中(固定住) 11.32 性能比较和监控并行操作...... 593 的 PL/SQL 对象...... 629 11.33 优化 RAC 中的并行操作...... 595
L Oracle Database 11gR2 性能调整与优化
12.10 监控 V$SESSION_LONGOPS 13.7.6 过高的硬解析 ...... 679 视图以定位有问题的查询...... 630 13.7.7 互斥锁/闩锁等待和休眠 .....680 12.11 通过 V$SQLAREA 发现有 13.7.8 其他调整选项 ...... 681 问题的查询...... 632 13.8 获得重做日志的信息...... 682 12.12 检查用户的当前操作及其 13.9 设置初始化参数 ...... 683 使用的资源...... 633 13.10 缓冲区缓存/数据块的 12.12.1 查找用户正在访问的 详细信息...... 686 对象 ...... 634 13.10.1 缓存状态 ...... 687 12.12.2 获取详细的用户信息 ...... 634 13.10.2 占用数据块缓存的段 ...... 688 12.13 使用索引...... 635 13.10.3 热数据块/闩锁争用和 12.14 确定锁定问题...... 637 等待事件...... 690 12.14.1 杀掉有问题的会话...... 639 13.11 获得实例/数据库相关的信息 ... 694 12.14.2 找出使用多个会话的 13.12 高效使用 X$表及相关策略 ..... 695 用户 ...... 640 13.13 Oracle 内部的相关主题...... 696 12.15 找出磁盘 I/O 问题...... 641 13.13.1 跟踪 ...... 696 12.16 发现回滚段的争用 ...... 644 13.13.2 DBMS_TRACE 包...... 700 12.17 确定是否有足够多的 13.13.3 事件 ...... 701 空闲列表...... 645 13.13.4 转储(dump) ...... 702 12.18 检查权限和角色 ...... 647 13.13.5 oradebug 命令...... 702 12.19 等待事件 V$视图 ...... 649 13.13.6 TRCSESS 工具...... 705 12.20 一些主要的 V$视图类别...... 652 13.14 阅读跟踪文件 ...... 705 12.21 要诀回顾...... 660 13.14.1 等待信息和响应时间 ...... 708 12.22 参考文献...... 661 13.14.2 递归调用 ...... 709 13.14.3 模块信息 ...... 709 第 13 章 X$表(针对高级 DBA) ...... 663 13.14.4 提交 ...... 710 13.1 X$表介绍...... 664 13.14.5 UNMAP ...... 710 13.1.1 有关 X$表的误解 ...... 665 13.14.6 绑定变量 ...... 710 13.1.2 授权查看 X$表 ...... 666 13.14.7 错误 ...... 711 13.2 创建 V$视图和 X$表...... 667 13.15 X$表分组...... 711 13.3 获得所有 X$表的列表...... 669 13.16 X$表与非 V$固定视图的联系 ... 725 13.4 获得所有 X$索引的列表...... 670 13.17 常见的 X$表连接...... 726 13.5 对 X$表和索引使用的提示...... 671 13.18 X$表的命名 ...... 728 13.6 监控共享池的空间分配...... 672 13.19 要诀回顾...... 736 13.7 创建查询脚本来监控共享池...... 673 13.20 参考文献...... 736 13.7.1 ORA-04031 错误 ...... 673 13.7.2 空间分配过大而引起的 第 14 章 使用 Statspack 和 AWR 报告 争用...... 674 调优 Wait、闩锁(Latch)和互斥锁 13.7.3 共享池碎片化 ...... 675 (Mutex) ...... 739 13.7.4 共享池和 Java 池中空闲 14.1 11gR2(11.2)中 Statspack 和 内存过低...... 676 AWR 报告的新特性 ...... 740 13.7.5 库缓存命中率 ...... 677 14.2 安装 Statspack ...... 741
目 录 LI
14.2.1 perfstat 账户的安全管理...... 742 14.7 11gR2 脚本...... 810 14.2.2 安装之后...... 742 14.8 要诀回顾...... 811 14.2.3 收集统计数据 ...... 743 14.9 参考文献...... 812 14.2.4 运行统计数据报告...... 746 第 15 章 施行快速系统审查(针对 DBA) ...815 14.3 AWR 和 AWR 报告...... 747 15.1 总体绩效指数(TPI) ...... 816 14.3.1 手动管理 AWR ...... 747 15.2 训练绩效指数(EPI) ...... 816 14.3.2 AWR 自动快照...... 749 15.3 系统绩效指数(SPI)...... 819 14.3.3 AWR 快照报告...... 749 15.4 内存绩效指数(MPI) ...... 821 14.3.4 在 Oracle 企业管理器网格 15.4.1 排名前 25 的“内存滥用” 控制器中运行 AWR 报告 ...751 语句是否优化...... 822 14.4 Statspack 和 AWR 输出解析 ...... 754 15.4.2 10 大“内存滥用”语句在 14.4.1 报告头信息(Header)...... 754 所有语句中所占的比重 ...... 823 14.4.2 负载概要...... 755 15.4.3 缓冲区缓存命中率...... 824 14.4.3 实例效率...... 756 15.4.4 数据字典缓存命中率...... 826 14.4.4 Top 等待事件 ...... 759 库缓存命中率 ...... 14.4.5 Oracle Bugs...... 769 15.4.5 827 内存中排序命中率 ..... 14.4.6 Oracle 影子进程的 15.4.6 PGA 827 .. 生命周期...... 771 15.4.7 空闲的数据缓冲区的比例 828 ...... 14.4.7 RAC 等待事件和互连 15.4.8 有效地使用结果集缓存 830 ...... 统计数据...... 772 15.4.9 固定/缓存对象 830 ...... 14.4.8 TOP SQL 语句 ...... 773 15.5 磁盘绩效指数(DPI) 831 14.4.9 实例活动统计数据...... 775 15.5.1 优化滥用磁盘读操作的 ...... 14.4.10 表空间和文件 I/O 的 前 25 条语句 832 统计数据 ...... 779 15.5.2 最滥用磁盘读操作的 14.4.11 段统计数据...... 782 前 10 条语句占所有语句 ...... 14.4.12 其他的内存统计数据...... 783 磁盘读的比例 833 ...... 14.4.13 UNDO 统计数据 ...... 788 15.5.3 分离表和索引 834 14.4.14 闩锁和互斥锁统计信息.....789 15.5.4 关键任务表管理...... 834 14.4.15 在块级别调优和查看 15.5.5 分离关键的 Oracle 文件...... 835 (高级)...... 797 15.5.6 自动 UNDO 管理 ...... 836 14.4.16 数据字典和库缓存的 15.5.7 临时段的平衡 ...... 839 统计数据 ...... 800 15.6 总体绩效指数(Total Performance 14.4.17 SGA 内存统计数据...... 802 Index,TPI)...... 840 14.4.18 非默认的初始化参数...... 803 15.7 系统综合检查的示例...... 841 14.5 AWR 报告和 Statspack 输出 15.7.1 评级系统...... 841 结果中需要首先查看的 10 项 15.7.2 系统审查评级类别的示例 ....841 内容...... 804 15.7.3 需要立即采取行动的 14.5.1 管理 Statspack 数据...... 805 问题项...... 843 14.5.2 升级 Statspack ...... 806 15.7.4 其他需要采取行动的 14.5.3 删除 Statspack ...... 806 问题项...... 843 14.6 新 ADDM 报告的快速说明 ...... 806 15.8 系统信息列表 ...... 843
LII Oracle Database 11gR2 性能调整与优化
15.8.1 与内存有关的数值...... 844 16.6 使用 mpstat 命令辨认 CPU 15.8.2 与磁盘有关的数值...... 844 瓶颈...... 862 15.8.3 与 CPU 有关的数值...... 844 16.7 结合使用 ps 命令和选定的 15.8.4 与备份和恢复有关的信息.....845 V$视图...... 863 15.8.5 命名约定和/或标准以及 16.8 使用 iostat 命令辨认磁盘 I/O 安全信息问题 ...... 845 瓶颈...... 866 15.8.6 DBA 知识评级...... 846 16.8.1 为磁盘驱动器 sd15、sd16、 15.9 TPI 和系统检查需要考虑的 sd17 和 sd18 使用 iostat 的 其他项...... 846 -d 选项 ...... 867 15.10 要诀回顾...... 847 16.8.2 使用 iostat 的 -D 选项...... 867 15.11 参考文献...... 847 16.8.3 使用 iostat 的 -x 选项...... 867 16.8.4 iostat 的 -x 选项与 shell 第 16 章 运用 UNIX 实用工具来 脚本中的逻辑相结合...... 868 监控系统(针对 DBA) ...... 849 16.9 使用 ipcs 命令测定共享内存..... 869 16.1 UNIX/Linux 实用工具 ...... 850 16.10 使用 vmstat 命令监控系统 16.2 使用 sar 命令监控 CPU 的 负载...... 870 使用情况 ...... 850 16.11 监控磁盘空闲空间...... 871 16.2.1 sar -u(检查 CPU 的 16.12 监控网络性能 ...... 872 繁忙程度)...... 850 16.12.1 使用 spray 命令进行 16.2.2 sar -d 命令(找出 I/O 问题)....852 监控 ...... 16.2.3 sar -b 命令(检查缓冲区 875 使用 监控 高速缓存)...... 855 16.12.2 nfsstat -c ...... 16.2.4 sar -q 命令(检查运行队列 网络性能 876 和交换队列的长度) ...... 855 16.12.3 使用 netstat 监控网络 16.3 使用 sar 命令和 vmstat 命令 性能 ...... 877 监控调页/交换 ...... 856 16.12.4 显示可调参数的当前值....878 16.3.1 使用 sar 命令的 -p 选项 16.12.5 修改配置信息文件 ...... 880 报告调页活动 ...... 856 16.12.6 影响性能的其他因素 ...... 880 16.3.2 使用 sar 命令的 -w 选项 16.13 改善性能的其他途径...... 881 报告交换和切换活动...... 857 16.14 要诀回顾...... 882 16.3.3 使用 sar 命令的 -r 选项 16.15 参考文献...... 882 报告空闲内存和空闲 附录 A 重要的初始化参数(针对 DBA) ....883 交换空间...... 857 .... 16.3.4 使用 sar 命令的 -g 选项 附录 B V$视图(针对 DBA 和开发人员) 925 报告调页活动 ...... 858 附录 C X$表(针对 DBA)...... 979 16.3.5 使用 sar -wpgr 命令报告 内存资源的使用情况...... 858 16.4 使用 top 命令找出系统上最差 的用户...... 860 16.5 使用 uptime 命令监控 CPU 负载...... 862
第1章
11g R1 & R2 新特性介绍 (针对 DBA 和开发者)
首先我要说明:本书的主要目的是帮助初级和中级水平的 Oracle 专业人士了解 Oracle 系统及 更好地优化它。后面的章节里也介绍了不少专家主题,但首要的任务却是协助那些被性能问题折 磨得很沮丧的专业人士,他们正寻求着改善数据库性能的简单诀窍。本书的目标很单纯:提供一 个装满此类诀窍的弹药库,在各种不同的情况下您都可以运用它来使系统快起来。 自本书的 9i 版始,第 1 章成了讲述新特性的一章(介绍很多调优时最常用的新特性),并获得 了很多读者的喜爱。介绍新特性这一章既然如此受欢迎,我就继续把 Oracle 11g 的新特性介绍作 为本书的第 1 章来写吧(从 Exadata 的范式转换开始)。其余的章节中,难度循序渐进并提供了大量 调优的诀窍,以对您的调优之旅有所帮助。我确信,您可以在本书中找到一些在任何其他地方都 找不到的信息。
2 Oracle Database 11gR2 性能调整与优化
如果您希望仅读一章就能得到优化数据库的方法或者一揽子方案,那么我提供具有如此特点 的两章给那些没有时间通读本书的读者。头一个是介绍 Statspack 和 AWR 的第 14 章(Statspack 是 免费的,但 AWR 的功能更强):这是两个好得令人难以置信的工具,包含了大多数专家所最常用 的脚本,专家们在使用 V$视图和 X$表优化系统时调用这些脚本(第 12 和 13 章中介绍了 V$视图 和 X$表)。第 14 章花了我很长时间才写成,时间主要花在了更新闩(Latch)等内容和互斥(Mutex) 的新内容上。另一个包罗万象的优化章节乃是介绍企业管理器(Enterprise Manager,包括数据库控 制器和网格控制器)的第 5 章。企业管理器提供了图形化的方法来优化您的系统,包括许多用于 RAC 系统和大规模网格控制的特性。企业管理器为您提供了极佳的、以单一界面来查看和优化多 个系统的能力。 简言之,第 1 章要讲的是 Oracle 11gR1 和 R2 中一些令人感兴趣的新特性。许多新的和改善 了的特性都包含在这个版本中。Oracle 11g 的目标不仅仅是创造一个更健壮的数据库管理系统, 同时还要简化安装和管理的工作,以提高可用性。这种趋势从 Oracle 9i 就已经开始,在 10g 里得 到延续,在 11g 中进一步延续下去。Oracle 的战略方向就是提供一个完全集成的功能集合,来取 代数据库管理员们用以管理他们环境的第三方软件。本书并不会对本章中列出的所有新特性作详 细介绍(因为有些特性与优化并无直接的关系,而且本书的篇幅也有限制)。尽管如此,为了使读 者对 11gR2 有个整体印象,我想还是需要这么一章来介绍一些好的特性,而不管它们是否与优化 有关。 本章中所涉及的新功能包括: ● 轮到 Exadata 出场了! ● 高级压缩 ● 自动诊断信息库(Automatic Diagnostic Repository,ADR) ● 自动共享内存管理(Automatic Shared Memory Management,ASMM)的改进 ● ASM(Automatic Storage Management,自动存储管理)的改进 ● 自动 SQL 优化 ● 数据卫士(Data Guard)的增强 ● 数据泵的增强(压缩、加密、传统模式) ● 增强了的统计信息 ● 闪回数据存档 ● 健康情况监控 ● 事件打包服务(Incident Packaging Service,IPS) ● 不可视索引(invisible index) ● 分区新特性(区间分区、REF 分区、系统分区、虚拟列分区、分区顾问) ● 只读表 ● RAC One Node 和 RAC Patching ● 真正应用测试(Real Application Testing) ● SQL 性能分析器(SQL Performance Analyzer,SPA) ● 结果集缓存(Result Cache) ● RMAN 的新特性
第1章 11g R1 & R2 新特性介绍(针对 DBA 和开发者) 3
● 安全文件(SecureFiles) ● 流(XStream In、XStream Out、高级压缩支持)的增强 ● 临时表空间的收缩 ● 透明数据加密(Transparent Data Encryption,TDE)的改进 ● 11g 新的后台进程 ● 11g 版本特性对照表
注意 因为这些特性是新的,所以您应该谨慎使用、彻底测试,直到确信它们不会造成数据库的问 题。倘若有权限访问 MOS1,则我强烈地建议您去确定此准备使用的特性是否有任何已知的问题。 Google.com(尽管给出的信息比较笼统)是另一个查找 Oracle 特性和功能当前信息的好地方。
1.1 轮到 Exadata 出场了!
伴随着 Sun 的被收购,一场范式转换的革命发生在数据库市场、硬件界和整个 IT 行业。虽 然这场范式转变才刚刚开始,然而早期的波动预示着重大转变已经到来,未来的十年中还会有更 大的转变。这里列出 Exadata 的一些要点,若想了解更多的细节,则可参阅 Exadata 那一章(第 11 章)。Exadata 是结合了数据库威力的硬件,它利用了 Oracle 加在硬件层面的特性,而其他硬件供 应商无法轻易地、或者根本不可能复制这些特性。第 11 章中的一些主题将详细讨论 Exadata 的 主要优点: ● 闪存(Flash Cache) 闪存是由比普通磁盘快约 20-50 倍(取决于不同的磁盘)的固态硬盘组成(信息存储于芯片上, 满配的机架上可达 5TB 的容量)。闪存缓存热数据(经常需要访问的数据),这是数据访问的最后一 步(它首先返回数据给用户,然后根据用户的设置为下一次的访问缓存这些数据)。
注意 闪存(硬件/芯片)不同于数据库闪存。您可以在 Oracle Database 11g 和 Oracle RAC 11g 中使用 数据库闪存。如果数据库运行在 Solaris 或者 Oracle Linux 操作系统上,那么您可以在线添加可选 的数据库闪存。这是一个基于文件扩展的常驻 SGA 缓冲区的高速缓存(类似于交换区),为数据块 提供二级缓存。当数据库被换出 SGA 时该文件被使用。如果希望了解更多信息,请参阅初始化 参数 DB_FLASH_CACHE_SIZE。
● 存储索引(Storage Index) 存储索引利用最小值/最大值使查询运行得更快。使用存储索引通常可以达到 10 倍的性能提 升。它们主要维护数据(比如 metadata)的摘要信息。内存结构驻留在存储单元(cell)层面上。对于 一个存储单元而言,存储索引最多可以储存 8 个查询表列的最小值/最大值。因此,存储索引指示 数据是如何存储在存储单元上的(就像分区的最小值/最大值)。查询一个表时,数据库会检查存储 索引以确定为获得所需要的数据都要访问哪些存储单元。Oracle 根据不同列上的最小值/最大值搜 索数据,在不匹配的情况下就消除在存储单元上的 I/O,该过程对用户 100%透明。它是在硬件层 面上进行的,通常来说每 1MB 的磁盘就有一个索引条目。Oracle 在内部自动完成这项工作而无需
1 译者注:MOS 即 My Oracle Support,以前叫 Metalink。
4 Oracle Database 11gR2 性能调整与优化
任何设置。存储索引还可以为分布极为不均的数据提供巨大的好处。存储索引提供了对高选择性 值的快速访问,而对选择性不高的值则通过常规的 Exadata 卸载来处理。 ● 智能扫描(Smart Scan) 智能扫描是 Oracle 在内部硬件层面执行的。通常来说,可以节省 10 倍的开销。Oracle 基于 WHERE 子句(谓词)进行过滤,过滤条件包括行、列或连接(Join)。智能扫描无需设置,Oracle 在 内部自动完成这项工作。 ● 混合列压缩(Hybrid Columnar Compression,HCC) 混合列压缩,也被称为 Exadata 混合列压缩(EHCC),是指数据由列行混合的格式组成,然后 进行压缩,性能可以提高 10 到 30 倍。表是由压缩单位(Compression Unit,CU)组织起来的,其中 包含约 1000 行数据(行的多少取决于这些行的数据量)。压缩单元跨越多个数据块。混合列压缩对 于批量加载数据来说非常有好处,但它不是为 OLTP 或单块读操作而构建的。它主要用于数据仓 库和被查询的数据,而不是频繁更新的数据。相比于 Gzip/Bzip2,混合列压缩通常是其两倍的压 缩比和 10 倍的访问效率。 ● 企业管理器网格控制器 Oracle 企业管理器网格控制器有个专门的 Exadata 插件,通过这个插件,您可以很容易地管 理和查看 Oracle 提供给 Exadata 的许多特性。它还可以确保一切都正常和高效地工作(这部分在第 5 章以及第 11 章有介绍) ● 在企业管理器中模拟 Exadata 可以在实施 Exadata 之前,让您在当前运行的系统上模拟 Exadata 并检查它可以带来的好处。 这个特性是 SQL 性能分析器的一部分,SQL 性能分析器是 Oracle 真正应用测试(Real Application Test,RAT)的一个组件。这个选件需要额外购买。 ● I/O 资源管理器 Oracle 最新的 I/O 资源管理(IORM)工具可以让 Exadata 管理多个工作负载,并为每个真正必 需的数据库、用户或任务设置资源。IORM 给您通过一台机器轻松管理许多系统的能力。 ● 安全性 带修改跟踪文件的安全加密备份要快得多了,存储节点还对其提供了解密的硬件加速: Exadata 利用 CPU 在硬件层面加速 AES-NI 的解密过程,所以即便在使用 TDE 表空间或列的加密 时,您也可以加密和解密(加密的数据在使用智能扫描前解密)。 ● 工具 Cellcli 是一个查询硬件层面的命令行接口,可用于监控单个存储单元上各种各样的健康指标; DCLI 用于查询多个存储单元上的信息,ADR 命令行解释工具(ADRCI Command Interpreter)用于诊断。 许多最佳实践将有助于您充分利用 Exadata。我先从一个必须做的和不能做的清单开始,然后 列出一些最佳实践!请注意,这些可能随时更改(检查 Oracle 的官方文档以获取最新的信息)。 ● 必须安装 Bundle Patch 5(参考 MOS 文献:888828.1 以获取最新的补丁)。 ● 必须使用 ASM(自动存储管理);ASM 为 Exadata 提供文件系统和卷管理器。 ● 数据中心必须配备符合要求的制冷系统!这是非常重要的(我建议做一些这方面的研究)。 ● 必须在支起的地板之上铺三层打了洞(冷却的原因)的瓷砖来承载整个机架(必须能承受 2219 磅/964 公斤),前后端之间的通风量要在 1560 CFM 和 2200 CFM2之间,不这样做就 可能会热到要融掉!所有这一切都可能会改变,所以请检查最新的规格需求。
2 CFM 是一种流量单位,1CFM≈1.7m3/h。
第1章 11g R1 & R2 新特性介绍(针对 DBA 和开发者) 5
● 必须有合格的电力保障。 ● 必须安装 Oracle Linux 5.3(x86_64)和 Oracle Database 11.2(目前推荐)。 ● 必须使用 RMAN 进行备份。 ● 考虑使用 StorageTek SL500 磁带备份(评价很不错,但价格偏贵)。 ● 不要添加任何外来的硬件……不支持! ● 不要更改 BIOS/驱动……不支持! 下面是一些其他的最佳实践: ● 使用 4MB 大小的 ASM 分配单元(Allocation Unit,AU)(目前推荐)。 ● 创建 Celldisk 和 Griddisks 时使用“CREATE ALL”。 ● 使用 DCLI 一次性在所有存储服务器上执行命令(有用而且节省时间)。 ● 使用 IORM 管理资源。 ● 安装之前确定您的快速恢复区(Fast Recovery Area,FRA)和 MAA 需求。 ● 数据库使用 11.2.0.1 以上版本(11.2.1.3.1)和 ASM 的 11.2.0.1 以上版本(目前最低要求)。 ● 必须兼容 11.2.0.1 以上版本(目前最低要求)。 ● 使用 32GB 大小的日志文件。 ● 使用本地管理表空间(Locally Managed Tablespace,LMT)和 4MB 的统一大小区(Extent)。 ● 使用数据泵移动数据(通常使用这个工具,您也可以有很多其他选择)。 ● 使用默认的初始化参数启动,根据您的工作负载在需要的时候再调整。 本书写作的时候,下面提到的数据库机器已经就位,截止 2011 年 6 月 Oracle 已经卖出了第 1 000 台 Exadata 机器。现在的 Exadata 机器提供了 150 万闪存 IOPS(每秒的 I/O)。您读到这段文 字的时候,这个数字一定又刷新了。正如加速了软件世界那样,Oracle 正在加快它们的硬件世界。 如果 Oracle 继续这种加速的话,广受欢迎的电影“钢铁侠”中的世界可能并不像想象的那么遥远。 在影片中,钢铁侠甚至“访问 Oracle 网格”。不知您注意到了没有,拉里·埃利森也出现在电影 中。软硬一体的工程正在改变游戏规则! 第 2 版(X2-2)Exadata 机器由 Oracle 公司(Sun)独家制造,它包括: ● 8台计算服务器(型号 4170 M2)