本文来自“白鳝的洞穴”微信公众号,作者/白鳝。
今天有个朋友在群里问硬解析、软解析、软软解析、软软软解析怎么区分。关于这个问题,十多年前是仔细研究过的,不过一些细节现在让我说,也一下子说不清楚。于是找出《DBA的思想天空》这本书翻了一下。找出几段发给他了。顺便看了看当年我在第一篇《基本原理篇》的篇头,觉得自己也有所感悟。
被自己十几年前写的书教育了一下挺丢人的,说明本人现在的技术比起十几年前没有进步,很可能退步了不少。这些年有些脱离一线了,人也浮在半空中,比起十多年前那么落地的学技术、用技术、泡在用户现场和各种技术资料里,一点点的分析数据库的原理,了解数据库的本质,现在只能算是在混日子。今天摘录几段,分享给大家,与大家共勉。
很多朋友都会游泳,那么我来问一个简单的问题:什么叫做真正地学会了游泳?每个学游泳的人都有这样的感受,刚刚学习游泳的时候最大的问题是无法浮在水面上;经过努力,发现只要手脚按照一定方式滑动,身体放平就能浮在水面上了,这个时候就感觉从不会游泳变成会游泳了。但是这时候你会面临另外一个问题,就是不会换气,学会换气后再往后学习就容易了很多,不过可能我们游上几十米、百把米就会觉得很累。后来我们发现,原来我们游泳的姿势还不太标准,而如果我们学会了踩水,游多远都不是个问题了,这个时候我们就如鱼得水了。学习Oracle其实和学习游泳十分类似,刚刚开始的时候,我们处于入门阶段,要克服对Oracle的恐惧心理,只要我们想学好Oracle,我们就一定能做到,实际上Oracle在入门阶段是十分容易的。我们从头学习Oracle,学会了安装数据库,学会了管理表空间,学会了日常的故障处理。就像我们学游泳的时候刚刚学会换气一样,虽然感觉已经掌握了Oracle数据库,但是碰到稍微复杂一些的问题我们还是觉得很难入手。我们能看清楚一些东西,但是感觉还是看不远。
上面这种情况是每个初学者都会碰到的,学Oracle和学游泳一样,刚开始的时候我们只是学会了游泳的外部表现,学会了像别人一样划水、换气,但是并没有真正掌握游泳的本质。如果要消除初学期的迷茫,我们一定要真正地掌握Oracle数据库的概念,一个DBA如果连认真学习Oracle的基本概念都不能做到,那么我觉得他也很难成为一个真正的高手。
这些年我在网上和大家一起讨论Oracle的问题,也经常有朋友问我,要成为一个优秀的DBA,应该看些什么书。我给大家推荐的第一本书就是《Oracle Concepts》,这也是我唯一能够推荐给所有人的书。这本书确实适合任何一个DBA阅读,无论你是初学者还是已经工作了很多年的高手。只要你没有认真读过这本书,你就有必要去读一遍。
理解Oracle的基本原理有助于你用一种十分理性的思维去考虑问题,在处理问题的时候能够更快地抓住问题的本质。我们大家在从事DBA工作的时候,经常会碰到这样的情形,一个问题困扰了我们很长时间,突然猛地一下,你就抓住了问题的关键,然后它就迎刃而解了。而在这之前,我们可能会做过很多尝试,这些尝试有些是有序的,有些是无序的,甚至有些只是瞎蒙。
在这种情况下,有时候经验是帮助不了你的,因为所有根据经验的分析都已经做完了,并且被证明是无效的。这时,我们就只能根据自己对问题本质的理解去分析,才可能最终解决问题。
事实上,要想像Oracle一样思考,首先就需要了解Oracle的本质是什么,它是怎么运作的,在运作过程中,哪些地方可能成为瓶颈。这个时候可能就有朋友感到疑惑了:我们如何了解Oracle内部运作的原理呢?这看似一个不可能完成的任务。确实,在处理有些问题的时候,我们可能要了解Oracle很深入的算法,但是在绝大多数情况下,我们分析问题只需要了解一些我们在Oracle官方文档中提及的原理性的东西,并不需要深入到算法和源代码级别。比如说,如果碰到一个共享池的性能问题,你会马上联系到共享池、库缓存(library cache)、字典缓存(rowcache)、CURSOR,以及相关的一些闩锁、参数等,在大多数情况下这些就可以支撑你做分析了。
但是必须把这些知识点编织为一张网,而不是一个一个的知识点。对于大多数DBA来说,想把这些知识点编织为一张网是比较难的。这需要你花费大量的时间来学习,而很少有一本书能够从这个角度去介绍知识。因此这种学习会比较困难。在本章,老白将尝试以这种方式来介绍相关的知识点,帮助大家从知识点升级为一个立体的知识体系。
另外,把知识点融会贯通不是看书就能达到的,要想达到这个目标,必须进行足够的实践活动。你只有在把学到的知识应用在实践中,才可能突破知识孤岛,达到新的境界。因此,如果你看完第一部分内容后,有些知识点还感觉无法掌握,这也并不要紧,结合自己碰到的案例思考一下,也许会更有收获。
现在我们已经进入了一个全新的时代,Oracle已经不是很多DBA今后谋生的主要产品了,我们是否需要像十多年前的DBA一样去学习这些数据库技术呢?对于我们这个岁数的人来说,可能不大需要了,再过几年就该退休了。而对于刚刚入行的年轻DBA们,你们怎么考虑这个问题呢?