Oracle核心技術揭密 導讀

2021-09-23 15:50:09 字數 2408 閱讀 6143

preface前  言

美國有一句著名的諺語:如果上帝關閉了一扇門,他會為你開啟一扇窗。美國還有乙個有名的關於oracle的笑話:上帝和埃里森的區別就是,上帝不認為自己是埃里森。

無論上帝怎麼想,埃里森肯定認為自己是上帝,至少,是資料庫界的上帝。這位資料庫界的上帝所開創的著名的oracle資料庫軟體是閉源的,對於想研究oracle的dba來說,相當於關上了一扇門。但同時oracle中提供大量的dump命令,這又相當於為dba開啟了一扇窗。但現在,這扇窗正在慢慢關閉。

很早之前,有很多從oracle公司流向外界的「內部資料」,對這些內部資料的研究甚至成為學習oracle的乙個專門分支:oracle internal。當時很多dba都會在簡歷中加上一行:「精通oracle internal」。當然,筆者也不例外。但是,近五六年來,不知是因為oracle公司加強控制,還是因為眾dba研究熱情下降,或者二者兼而有之,市面上所見的「內部資料」越來越少,特別是近兩三年,基本已經絕跡。

從筆者來看,造成這種情況是「二者兼而有之」。「oracle有意控制」論並非空穴來風,伴隨著oracle資料庫應用得越來越廣泛,第三方維護市場的發展也是如火如荼。如果有了疑難問題只能找oracle原廠的售後團隊解決,那麼第三方維護公司將很難與oracle競爭,這是控制這塊市場的最好方法。實現這一目標的捷徑,當然就是控制非原廠dba對oracle資料庫的了解程度。但是另一方面,oracle對oracle技術社群的支援還是有些力度的。所以個人感覺是二者兼而有之,但願我是「以小人之心,度君子之腹」。無論oracle是否有意控制,現在internal愛好者越來越少已是不爭的事實,這與oracle的閉源策略有很大關係。

筆者早年也是「oracle internal」研究的愛好者,個人認為,對internal的研究分為以下3個階段:

好奇。學以致用。

麻木。

但是很快,你會發現,看不到oracle的源**,僅從各種dump結果中分析演算法,無異於「隔靴搔癢」,有個最恰當的成語描述這種情況:霧裡看花。你會發現,我們霧中看出來的「花」,在解決實際問題時,作用極為有限。一些疑難問題,還是無法理清頭緒。這樣的事情經歷多了,就進入了「麻木」階段。自然也會得出結論,對internal的研究,現實意義有限,主要是滿足好奇心。然後,有可能還會語重心長地告誡初學者,internal意義不大,淺嘗輒止即可,不必浪費太多精力。當這樣的情況越來越多後,人們的「研究」慾望自然會越來越低。所以,現在基本上已經很少有人再去研究internal了。

反觀開源領域,雖然源**的改動並不是「想改你就改」那麼簡單,因為有各種各樣的管理委員會控制,如果不能成為委員,改乙個bug都難,但由於可以看到源**,只要下工夫鑽研**,想做到「明明白白我的心」並不難。這樣一來,在遇到一些奇怪問題時,進行診斷、分析將更有依據。這其實是開源資料庫在國內流行的主要原因之一。國內的committer並不多,就算能讀懂原始碼也不能修改,在這種情況下,開源除了「便宜」、成本低之外,還有什麼優勢呢?優勢就是「用得明白」、「用得清楚」。閉源的oracle雖然bug更少、更穩定,但出了奇怪的問題後就很難解決。開源則不一樣了。一邊是oracle的「霧裡看花」,你看不到隱藏在暗處的原理;一邊是開源領域的「明明白白我的心」,眾多技術人員當然選擇「棄暗投明 」了。

而且近些年,由於前面說的兩點原因,oracle這場霧更濃了,已經變成「霧霾」了。以前著名的內部資料dsi也止步於oracle 9i,鮮見oracle 10g版本的,更別說oracle 11g的了。外界dba由於缺乏對原理的了解,很多基本操作都要依賴原廠工程師。比如exadata,如果沒有原廠工程師協助,連安裝都很難完成,更別談運維了。oracle的大門從來就沒有敞開過,現在,連「窗」也在逐漸關閉。

變革正在到來。在「門」、「窗」都沒有的大環境下,或許可以選擇把牆給鑿了。鑿穿牆壁,一樣能看到internal。不過,工欲善其事,必先利其器。如果沒有適當的工具,想要開啟oracle這樣龐然大物般的軟體無疑是以卵擊石。幸運的是,現在鑿牆利器已經有了,那就是「動態效能跟蹤」語言,比如,linux下的system tap,solaris下的dtrace,等等。經過筆者試用比較,solaris下的dtrace更適合用來研究oracle原理。雖然我們只能在solaris平台使用,但oracle的原理在所有os下是一樣的(除了在windows下略有不同)。在solaris下研究出的原理,一樣可以用於其他平台,可方便大家進行效能調優、故障診斷。筆者書中大多數oracle內部原理的結論,都是使用dtrace加mdb分析而得出的。

dtrace跟蹤,再加上除錯工具mdb,筆者稱為dba中新的領域:「除錯oracle」。除錯技術的引入,加上我們對oracle的理解,可以讓我們把oracle原理看得更加清晰,可以達到與閱讀開源**同樣的效果。這如同吹散「霧霾」的北風,讓我們不再「霧裡看花」。對原理把握得更加清晰,也使得調優、故障診斷更加精準。「change」,是這兩年最流行的詞彙。「我們一直身處變革之中而不自知」。變革正在悄然進入dba領域,傳統的oracle運維日漸式微,這已然是不爭事實。眾多處於「麻木」階段的dba紛紛轉行。「除錯oracle」領域的出現,將是一條新的發展之路。希望本書能給大家提供一種新的思路。

Canvas 核心技術

最近專案需求中要寫較多h5小遊戲,遊戲本身體量不是很複雜,主要是承載較多業務邏輯,所以決定用canvas來完成遊戲部分。之前只是知道h5中有canvas這個東西,也知道它大概是畫圖的,但具體怎麼用,還是一無所知的。在mdn在看了一些相關資料,一口氣也看了html 5 canvas 核心技術和html...

Canvas 核心技術

最近專案需求中要寫較多h5小遊戲,遊戲本身體量不是很複雜,主要是承載較多業務邏輯,所以決定用canvas來完成遊戲部分。之前只是知道h5中有canvas這個東西,也知道它大概是畫圖的,但具體怎麼用,還是一無所知的。在mdn在看了一些相關資料,一口氣也看了html 5 canvas 核心技術和html...

Docker核心技術

執行在同樣的主機上,docker容器共用乙個container,而虛擬機器則使用自己的作業系統上的container,虛擬機器之間擁有比docker更好的隔離性,但docker相對於虛擬機器來說有更多的優勢,比如虛擬機器作業系統的存在額外占用了更多的計算資源,其次,從空間占用上,虛擬機器基本都是gb...