非商業轉載請註明做譯者、出處,並保留本文的原始連接: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的那些事