eygle.com   eygle.com
eygle.com eygle
eygle.com  
 
Digest Net: November 2013 Archives

November 2013 Archives

转引图灵访谈,原文地址: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年,于是你没有时间跳出来,尝试一些新方法。

有两个办法可以帮你获取更多的经验。第一个就是像今天这样的大会是很好的机会。你可以离开你的工作,听听别人分享的经验。你会得到很多新的启发,也会找到解决问题的不同方法。得到这样的启发是大有裨益的。

另外一点就是,我作为一个咨询师,我工作的方式会让我每年大概接触到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核心技术》扩展讲述的就是这本书一、二章的内容。我要小声透露一个消息,我可能会写一本关于物 理结构、索引,以及表方面的书,但是这件事还没有确定。这本书是要把《Oracle核心技术》中尚未展开的部分写出来,教你在写代码之前,通过如何选择不 同的物理结构,让数据库变得更有效率。如果可能的话,这将是一本很有意思的书,但是让我完成另一本关于Oracle的书希望渺渺。《Practical Oracle 8i》是一本好书,现在仍有人在买,如果我真的能完成下一本书,内容会和这本书一、二章之后的内容相关。

感谢杨志洪 、熊军、耿永辉三位译者协助采访。

Pages

Powered by Movable Type 6.3.2

About this Archive

This page is an archive of entries from November 2013 listed from newest to oldest.

July 2013 is the previous archive.

September 2018 is the next archive.

回到 首页 查看最近文章或者查看所有归档文章.