世界級Oracle專家Jonathan Lewis:我很為DBA們的未來擔心(圖靈訪談)

盼盼姐發表於2013-11-25

世界級Oracle專家Jonathan Lewis:我很為DBA們的未來擔心(圖靈訪談)

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》是一本好書,現在仍有人在買,如果我真的能完成下一本書,內容會和這本書一、二章之後的內容相關。

感謝楊志洪 、熊軍、耿永輝三位譯者協助採訪。

補充閱讀:TechTarget專訪Jonathan Lewis:關於Oracle的那些事


更多精彩,加入圖靈訪談微信!

相關文章