非商业转载请注明做译者、出处,并保留本文的原始连接:http://www.ituring.com.cn/article/62995程序员
Jonathan Lewis 是世界级Oracle资深专家,有20多年Oracle关系数据库管理经验。主要从事自由咨询顾问工做,其Oracle数据库引擎方面的培训课程和研讨会世界闻名。Jonathan曾是UKOUG(UK Oracle User Group)的负责人,他著有多本Oracle方面的畅销书,并维护本身的Oracle技术博客。他的博客:http://jonathanlewis.wordpress.com数据库
图灵社区: Oracle的自动化程度变得愈来愈高,不少须要人为介入的优化手段也变得愈来愈简单。在这种状况下,DBA怎么才能跟上发展、更好地提升数据库的效率?缓存
JL:要想跟上Oracle的发展是十分困难的。我之因此没法完成我想要写的书,就是由于我老是跟不上(笑)。虽然我能够解决不少实际问题,就算面对全新的难题,我也能够经过了解Oracle的表现,结合它的工做原理,很快诊断出问题。可是我却没法反向推断,若是你告诉我某种状况,我可能没法说出Oracle会作什么。我如今已经很难再进行预测了,可是我能够根据问题找缘由。跟上发展的意思我认为应该是预前判断Oracle的工做状态,要作到这些,我认为要有足够的经验。服务器
阅读手册是十分重要的事。我认为市面上还有两三本书,也能够帮助你掌握必要的信息。Christian Antognini有一本书叫作《Oracle性能诊断艺术》,在这本书中,他讲述了不少Oracle运做的知识,以及如何利用工具找到问题,同时也提出了如何解决问题的建议,这样的好书会教你Oracle怎么工做,而后会举一些例子告诉你Oracle能完成什么。若是你仔细读过手册,也读过这些书,你就知道如何构造模型,如何用特殊方式创建两个表,如何选择查询,如何选择Oracle的特性……你能够亲手实践手册或者从《Oracle性能诊断艺术》里学来的东西,而后本身创造出一个能够解决本身实际问题的办法。经过亲力亲为的实践这些知识,你就会知道Oracle能够作什么,什么又是错的了。我认为实践是最好的学习方法。微信
可是不少人没有时间来作这些事。你的公司可能会说:9点到岗,5点以前不准下班。这样你就没有空余时间,一直都忙着作别人安排好的事情。天天重复作一样的事,一作就是5年,因而你没有时间跳出来,尝试一些新方法。并发
有两个办法能够帮你获取更多的经验。第一个就是像今天这样的大会是很好的机会。你能够离开你的工做,听听别人分享的经验。你会获得不少新的启发,也会找到解决问题的不一样方法。获得这样的启发是大有裨益的。wordpress
另一点就是,我做为一个咨询师,我工做的方式会让我每一年大概接触到20家公司,我就会知道20种运做方式。大多数人只能有机会看到Oracle如何工做的冰山一角,可是我几乎有机会看到全貌。因此关于在Oracle上能够作什么,我可能更有经验。常规公司的DBA常常会说:咱们公司在过去5年中就是这么作的,咱们有其余的办法吗?DBA们应该常常安排本身重头思考一下,忘掉本身惯常的作法和思路,从新读手册,看看能不能想到一些新的办法。对于我来讲,若是我看到大家在作的工做,我可能会想出5种不一样的方式来达到一样的目的,由于我见过这些方式。对于 Oracle来讲,完成任务的方式多种多样,而普通DBA只能看到他天天接触的方式。因此,要成为出类拔萃的DBA,你就必须去了解和尝试不一样的作法。这些学习会花费你的时间,可是这也是必需要作的事。工具
图灵社区:你做为一位独立Oracle性能专家是如何工做的?在接到一个新案子以后你询问的第一个问题是什么?性能
JL:我仍是挺出名的,因此常常会接到电话或者是邮件说:咱们这出问题了,你下个礼拜哪天有时间能来一趟吗?我大概每周工做3天时间,我还要留出一天作一些很重要的试验,来了解Oracle,了解更好的运做方式,剩下一天我会从事写做,不管是书仍是博客。因此接到这样的电话,我一般都是有时间的,也许是下周,也许是下下周。学习
通常我在接到工做的时候,他们都会告诉我,哪里出了问题,须要我来作什么。在整个解决问题的过程当中,我第一步须要了解的永远都是:大家想要这个系统作什么?出现问题时的情况是什么样的?并非Oracle在干什么,机器在干什么,而是用户在作什么。而后他们可能就会说,银行系统处理了大批量的境外交易,每月咱们在作帐目核对的时候,就会出现性能问题。这就会告诉我他们日常的进程是什么,当在某天引入特殊进程的时候就会出现严重的性能问题,这两个进程之间哪里发生了冲突,它们的运行机制是什么。常常会有这样的状况,在得知业务在作什么,而后转入Oracle问题的时候,我就能够预测出数据库服务器上Oracle出现的是什么类型的问题。一旦我获得总体的状况,就能够追踪到具体的代码了,我开始检查数据库结构,询问为何要创建这个索引,想经过它作什么。而后从新运行,若是不行就导出性能数据,找出AWR报告、历史信息存储,以及其余Oracle能提供的信息,由此得出下一条线索。
图灵社区:我知道您满世界解决Oracle难题,如今您已经去过超过50个国家了。你有没有在这过程当中遇到过很棘手很难解决的问题?
JL:中国应该是第52个国家了(笑)。确实有这样的状况,很难判断问题究竟出在哪里。有的时候问题实际上是一个Oracle bug,可是很难证实。有时候会遇到关于并发行为很稀有的问题,两件事必须严格在同一时间发生才能出现这个问题。因而我就只能说有多是什么出了错,因而解决方法颇有可能就是须要绕过这个问题。有那么几回,我最终也没法说出是哪里出了问题,虽然我知道在什么条件会产生这样的问题,可是我没法给出足够的信息来从根本上解决这个问题,甚至都没办法提供足够信息找到Oracle向他们寻求产品改进。咱们能作的只能是创建历史记录,证实问题确实发生了。还有几回,在我找出问题后,其余人在我以前找到了解决方法。在我从业的25年中,有一两次这样的状况。
图灵社区:你有没有打算建一个团队来从事如今的咨询业务?
JL:你们总在问我这个问题。他们老是说:我能够为你的公司工做吗?事实上,我没有公司。我以为有了公司以后就要为这个公司负责,这样就无法一直作本身喜欢的工做了。而这两点对我来讲都没有什么吸引力。我不想为找到合适的工做者而发愁,我没法给出这就是他们须要用来养家糊口的工做的保障。因此,能够说我历来都没有考虑过成立一个公司。
图灵社区:当你的孩子还小的时候,你不只要写书,还要忙着满世界作咨询服务,你是如何分配你的时间的?
JL:在1999年,当个人孩子还很小的时候,我开始写个人第一本书,当时尚未人像我同样作Oracle的咨询工做,你们当时都忙着从新编写程序,因此我以为颇有必要写一本书。我下决心花上半年的时间写这本书,暂时放下日常的工做。我告诉个人家人:我要写书了!次日,个人女儿对我说:“你还在写那本书吗?”她觉得我花了一成天写书,次日确定应该写完了!
在个人孩子很小的时候,大概是12岁以前,我会尽可能少出门作咨询,能够说我基本没怎么出远门。在他们大一些以后,我从新开始个人咨询工做,可是我会保证周末必定在家。我不会在一周内工做超过5天。今天大概是我25年中第三次,我周末没有和家人在一块儿。
图灵社区:这多是你做为独立专家的福利之一吧。
JL:是的,我已经把不少人引诱到加入这个行列了(笑)!我跟他们说:若是大家周末工做的话,就要花上两倍的时间,若是大家星期天工做的话,就要用上三倍的时间。
图灵社区:想以数据库做为事业的人一般面临两个选择,一个是做为DBA,另外一个是做为开发者。你对面对这两个选择犹豫不决的人有什么建议吗?
JL:对我来讲最大的问题就是我所看到的Oracle应用,它们没有体现出你们所说的DBA和开发者之间足够的合做性。有些人接受具体任务,他们写的代码须要和Oracle数据库交流,还有人管理Oracle数据库,他们成天看数据库的SQL。有时候他们会说:这人会不会写SQL啊?这写的是什么呀?我认为不该该有这样的分界线。若是你的应用背后有Oracle数据库,你应该知道数据库是如何工做的,这样开发者和DBA之间的对话就会更有效。
不少DBA抱怨,如今的数据库很大程度上就是按按钮。若是你是一位DBA,你可能这辈子都在作支持,没有机会接触像我所作的这些有趣的东西。若是你想精通现在的Oracle,而且享受你在Oracle上的工做,我认为你应该把本身放在两种工做的中间。这样你就会了解数据如何工做,就会享受和数据库交互的过程,也会喜欢和业务应用交流的过程,你会知道如何构建本身的代码和数据库更好的交流。因此,“DBA开发者”也许才是最合适的位置,并不只仅做为一个程序员,而是一个和数据库有亲密接触的程序员,享受数据库所能提供的帮助。固然,这可能须要找到一家可以提供这样位置的公司。
图灵社区:对于内核和功能,你认为关注哪一个更重要?
JL:我认为每一个人都应该熟悉undo和redo的运行方法,每一个人也应该了解一些相似库缓存如何工做的知识,由于他们应该知道,在完成一个很简单的任务时,后台都发生了些什么。也许你不须要对全部事情都知道得一清二楚,可是你须要知道何时须要干什么,须要对总体有一个把握。一旦你对全部事都有了大概的了解,我认为你不须要再有更深的考虑了。大多数人须要知道的就是索引表怎么工做,群怎么工做,压缩索引有什么好处。当你改变数据的时候,当你须要优化的时候,你就知道如何避免信息阻塞。基于此,你就能够去研究一下物理设计,这就是你须要掌握知识的上线了。
我对OTN数据库论坛上的一件事感到颇有趣,几乎每周,论坛上都会有一个问题“若是我把这行上移到这里,而不提交,在这以后咱们运行了好久,可是忽然间数据库崩溃了,Oracle会如何处理这件事?”我对这类问题出现的频率感到惊讶,由于从不少方面来讲,须要了解这些事的人很是少,你不须要知道如何解决和为何这么解决,只须要知道它就是这样就够了。多掌握一些知识固然好,可是若是这须要耗费你大量的时间和精力的话就不划算了。人们老是不厌其烦的问我这些问题,这其实也是我写这本书的一个缘由,大家来看书吧,别问了。
图灵社区:若是您的子女对计算机科学感兴趣,你会让他们选什么具体的方向呢?
JL:个人孩子对计算机科学一点都不感兴趣,甚至对科学都没什么兴趣。他们主修的都是艺术。若是要我给其余的人建议的话,我其实无法给出具体的建议。我对本身从事的工做很喜欢,我也鼓励别人作本身真正感兴趣的工做。若是你能经过这件事赚到钱,那就去试试吧。我不会和任何人说,你去作Oracle。我知道有些人他们并不对Oracle感兴趣,只是由于他们作的不赖,作其余的事又作不来,因此才从事这份工做。刚才这个问题的实质实际上是预测这个市场:5年以后的就业市场会是什么样呢?
若是有人要根据将来就业市场的走向来定夺本身的将来。那我就大胆猜想一下。我认为对于Oracle顶级专家来讲,会有一个很小的市场。5年后,可能很大部分的普通Oracle工种都会被挪到云端,只会有很少的用可插拔数据库的支持,来维持不多数量的数据库。而大部分小型企业,只要租赁Oracle的云端数据库就能够了。他们不须要本身买硬件和软件,也不须要有本身的DBA,只要为本身的应用租赁一块可运行的数据库就能够了。若是你想在5年后成为Oracle DBA,你要么就是为很大的公司工做,他们本身为了保护数据的隐密性,而把数据留在本身这里。要么就是为很大的机器工做,500台机器上运行着上百个数据库。小公司里的多数DBA,就不会存在了。除了Oracle,也会有其余的数据库技术也向这个方向发展。
事实上,须要维持大数据库的大公司数量并不很大。不管你的技术是什么,DBA都不会不少。我将在5年内退休,对此我长出一口气。很高兴我不是个初出茅庐的专家,由于我很担忧在5年后不少DBA的命运,他们找工做也许会很困难。除非他们真的出类拔萃,并且你们也承认他的能力。
图灵社区:你会考虑开发某种工具让代码能够跨越各类版本的限制吗?
JL:绝对不会。我历来没有想过要把我作的东西变成某种产品。由于若是要有产品的话,那个产品就必定要尽善尽美,并且要完美适配全部版本的Oracle。这就意味着我要花不少时间对已经存在的东西改来改去。这对任何人来讲,都是得不偿失的。我甚至都不会公布个人SQL代码,在个人博客上只有不多几个,我会说:这是一个很小的例子,这是2003年在某个版本的Oracle上运行的代码,它的做用是告诉你这个东西大概是怎么完成的。我毫不会说:这是一个在全部Oracle上都能运行的程序。看着我如今用的某些代码,我认为我能够把它们改得效率更高,这个高效版本能够在10上运行,也能够在11上运行,我十年前写的代码,如今仍然能够在9,10,11上用,对于个人要求来讲彻底适用。可是若是要我作一个产品来解释,我就须要它在全部产品上适用,并且还要回过头修改之前的代码。人们不会为不产生新的结果的事情付钱。因此从经济学上来讲也是不合算的。
市场上有些工具,我不会说具体名字,当你仔细观察它们运行的SQL,你就会发现他们的效率很低,这不是作事的正确方法。但你会认识到,在十年前,没有改变的需求的时候,它们仍然可以运行。在不少年之前,当Oracle 9刚问世的时候,有一个公司有个这样的标准工具,我在一个大会上看到了,是一个很小的展台。他们有一个产品在Oracle 8上小有名气,当时展台上挂着一个巨大的条幅,上面写:“Oracle 9的保证”。我就去问他们一些细节:“大家说Oracle 9的保证是什么意思?大家能作这些那些吗?”最终他们终于认可,这句话的意思实际上是,代码在Oracle 9上仍然能够运行。可是这样的产品并非为Oracle 9设计的,而是为Oracle 8设计的,只是能够在9上运行罢了。能够说若是我是这个产品的顾客的话,我听到这些话可不会高兴的。可是商业公司有本身的考虑,也就是这种考虑上的差异,使得我作梦也不想把我作的东西变成产品。
图灵社区:《Oracle核心技术》和《基于成本的Oracle优化法则》是两本很受欢迎的技术书。在《基于成本的Oracle优化法则》中你说过,会有一系列关于此主题的书,《Oracle核心技术》是这个系列的第二本,这个系列的其余书也在准备中吗?
JL:事实上,《Oracle核心技术》并非这个系列的第二本书。当我写完《基于成本》,我决定再也不继续写那些复杂、耗费时间,但又不是十分必要的主题,好比分布查询和平行查询。由于这些很让人费神的东西的需求并不很大。但我确实有计划继续写书,主题是我所掌握的其余信息。这个决定的根源是Oracle的变化和升级太快了,就算是有我这样背景的人,也没法跟上Oracle发布的步伐,没法预测在全部状况下Oracle的反应。虽然我一直尝试紧跟发展,写一本关于优化,内容丰厚的书,可是却一直没法开始。
《Oracle核心技术》实际上是倒退了一步,它跟随的是我在2000年写的一本书《Practical Oracle 8i》,介绍了Oracle工做的核心机制。《Oracle核心技术》扩展讲述的就是这本书1、二章的内容。我要小声透露一个消息,我可能会写一本关于物理结构、索引,以及表方面的书,可是这件事尚未肯定。这本书是要把《Oracle核心技术》中还没有展开的部分写出来,教你在写代码以前,经过如何选择不一样的物理结构,让数据库变得更有效率。若是可能的话,这将是一本颇有意思的书,可是让我完成另外一本关于Oracle的书但愿渺渺。《Practical Oracle 8i》是一本好书,如今仍有人在买,若是我真的能完成下一本书,内容会和这本书1、二章以后的内容相关。
感谢杨志洪 、熊军、耿永辉三位译者协助采访。
补充阅读:TechTarget专访Jonathan Lewis:关于Oracle的那些事