- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
性能分析与优化思路
2.1 关于锁
锁这种东西,对于初学者来说就像是一个深不可测、遥不可及的概念。我的经验告
诉我,如果初学者冲上来就去纠结Oracle 各种锁的概念、锁的类型、锁的级别,试图用
最快的方式来理解锁的含义,基本上都会感到痛不欲生,至少我当时的心情大致如此。
随着工作时间的变长,我慢慢地养成了一种和从前不太一样的思维方式。比如现在
我们在谈锁,以前的方法是,首先会去找文档来看什么是锁,费力不说,到底也没有搞
清楚;而现在的思维方式转变了,开始学会用一种轻松、主动的方式来思考问题,于是
我首先会去想,为什么会有锁?没有它会怎么样?
我必须要向大家推荐后面一种思考方式的好处。这是一种启发式的思考模式,是主
第2 章 锁和阻塞 21
动的,所以它是快乐的。而前一种是消极的,被动的,同时也是痛苦的。我就曾经在这
样的痛苦中摸索了很久,希望大家不要重蹈我的覆辙。
为了说明这样的一种思维方式,我举一个例子,想必大家都切身感受过。
中学时候学万有引力定律时,老师上来就告诉我们,世间万物是相吸的,并由牛顿
发现了它,下面是万有引力定律的公式„„于是大家机械地听着,记着,背着。坦白地
说,这样被动接受的感觉很一般,但至少还不太痛苦,因为我们还能听懂。大家试想一
下,万有引力是多么美好的东西啊?如果我们托着下巴,呆呆地坐在窗户前面想,为什
么地球就要绕着太阳转呢?为什么不会飞走呢?如果有一天飞走了,我们怎么办呢?这
看起来是在胡思乱想,比起课堂老师上来就捞干的说要低效得多,但是往往就是在这种
低效中,我们获得了任何人都不能给予的东西,我们通过自己的思维推理,得出了这个
结论:太阳对地球是有吸引力的。这是我们主动获得的东西,我们充满了成就感和自豪
感。
前面扯了一些看似不着边际的话,在我看来非常重要,这也是我想通过这本书想表
达的另一个目的,就是学会思考。它比我直接告诉你锁是什么要重要得多,它希望你能
够像思考地球为什么围绕着太阳转一样,托着下巴来思考Oracle 数据库为什么会发明一
个锁,这不是扯淡。
让我们一起来思考这个问题吧,如果你还不太习惯这种思考方式的话。为什么Oracle
数据库中会有锁呢?设想,如果世界上只有你一个人,你有一箱子金币,你会弄把锁头
来把它锁起来吗?不会,因为如果世界上只有你一个人,根本就不会有锁头这种东西出
现,因为没有其他高等生物会去打开它,除了你。你可能会问,举一个如此粗鄙的例子
给我们描述锁,太不把Oracle 放在眼里了吧?其实不是这样的。Oracle 的锁和这个锁头
一样吗?答案是一样的,就是因为受现实生活中的锁头的启发才取了这个名字(lock ),
所以你看,它神秘吗?一点都不神秘,那不过是一层窗户纸,只需要我们的轻轻一捅。
继续我们的推理,现实生活中因为存在着其他想得到箱子里金币的人,你为了防止
他们来拿,所以上了锁。在数据库中也存在着类似的事情,如果一个数据库只有你一个
人用,我绝对不相信Oracle 会费这么大的劲开发出一个锁来捣乱,所以,我们的答案找
到了,因为还有其他的人在使用这个数据,你为了防止他们把你做的事情弄糟,所以在
你对数据操作的时候,拒绝他们操作!简单吧?是不是还有点高兴?我们就在说说笑笑
的过程中了解了锁的渊源。
可能有人跳出来说,你说了半天只是说了一个锁,锁分很多种啊,表级锁、行级锁、
22 让Oracle 跑得更快——Oracle 10g 性能分析与优化思路
共享锁、排他锁„„你再来用你的快乐法推啊!
那好,我们再推,我们这回从哲学上来推。哲学真是一个非常高深莫测的学科,我
一直觉得只有一些绝顶聪明的人才能学懂哲学,我是学不懂的,只能引用他们发明的一
些话。比如现在我引用这条“存在即合理”。就是说,Oracle 的老板不是笨蛋,没必要花
高昂的费用雇人写一些没有意义的代码。那么,对于一个公司来说什么叫有意义?能满
足用户的需求即为有意义,好了,答案找到了,用户A 的系统需要用到表级锁,Oracle
公司为了把数据库卖给他,所以开发了表级锁,用户B 需要用到行级锁,所以Oracle 为
他们开发了行级锁„„
做技术的人,总想把所有的技术都学会,之前我也曾这么学过,后来发现学完之后
很快就忘了。比如最开始Oracle 推出RAC 的时候,我们费尽千辛万苦搭好了一个环
文档评论(0)