本文來自“白鱔的洞穴”微信公眾號(hào),作者/白鱔。
今天有個(gè)朋友在群里問硬解析、軟解析、軟軟解析、軟軟軟解析怎么區(qū)分。關(guān)于這個(gè)問題,十多年前是仔細(xì)研究過的,不過一些細(xì)節(jié)現(xiàn)在讓我說,也一下子說不清楚。于是找出《DBA的思想天空》這本書翻了一下。找出幾段發(fā)給他了。順便看了看當(dāng)年我在第一篇《基本原理篇》的篇頭,覺得自己也有所感悟。
被自己十幾年前寫的書教育了一下挺丟人的,說明本人現(xiàn)在的技術(shù)比起十幾年前沒有進(jìn)步,很可能退步了不少。這些年有些脫離一線了,人也浮在半空中,比起十多年前那么落地的學(xué)技術(shù)、用技術(shù)、泡在用戶現(xiàn)場和各種技術(shù)資料里,一點(diǎn)點(diǎn)的分析數(shù)據(jù)庫的原理,了解數(shù)據(jù)庫的本質(zhì),現(xiàn)在只能算是在混日子。今天摘錄幾段,分享給大家,與大家共勉。
很多朋友都會(huì)游泳,那么我來問一個(gè)簡單的問題:什么叫做真正地學(xué)會(huì)了游泳?每個(gè)學(xué)游泳的人都有這樣的感受,剛剛學(xué)習(xí)游泳的時(shí)候最大的問題是無法浮在水面上;經(jīng)過努力,發(fā)現(xiàn)只要手腳按照一定方式滑動(dòng),身體放平就能浮在水面上了,這個(gè)時(shí)候就感覺從不會(huì)游泳變成會(huì)游泳了。但是這時(shí)候你會(huì)面臨另外一個(gè)問題,就是不會(huì)換氣,學(xué)會(huì)換氣后再往后學(xué)習(xí)就容易了很多,不過可能我們游上幾十米、百把米就會(huì)覺得很累。后來我們發(fā)現(xiàn),原來我們游泳的姿勢還不太標(biāo)準(zhǔn),而如果我們學(xué)會(huì)了踩水,游多遠(yuǎn)都不是個(gè)問題了,這個(gè)時(shí)候我們就如魚得水了。學(xué)習(xí)Oracle其實(shí)和學(xué)習(xí)游泳十分類似,剛剛開始的時(shí)候,我們處于入門階段,要克服對(duì)Oracle的恐懼心理,只要我們想學(xué)好Oracle,我們就一定能做到,實(shí)際上Oracle在入門階段是十分容易的。我們從頭學(xué)習(xí)Oracle,學(xué)會(huì)了安裝數(shù)據(jù)庫,學(xué)會(huì)了管理表空間,學(xué)會(huì)了日常的故障處理。就像我們學(xué)游泳的時(shí)候剛剛學(xué)會(huì)換氣一樣,雖然感覺已經(jīng)掌握了Oracle數(shù)據(jù)庫,但是碰到稍微復(fù)雜一些的問題我們還是覺得很難入手。我們能看清楚一些東西,但是感覺還是看不遠(yuǎn)。
上面這種情況是每個(gè)初學(xué)者都會(huì)碰到的,學(xué)Oracle和學(xué)游泳一樣,剛開始的時(shí)候我們只是學(xué)會(huì)了游泳的外部表現(xiàn),學(xué)會(huì)了像別人一樣劃水、換氣,但是并沒有真正掌握游泳的本質(zhì)。如果要消除初學(xué)期的迷茫,我們一定要真正地掌握Oracle數(shù)據(jù)庫的概念,一個(gè)DBA如果連認(rèn)真學(xué)習(xí)Oracle的基本概念都不能做到,那么我覺得他也很難成為一個(gè)真正的高手。
這些年我在網(wǎng)上和大家一起討論Oracle的問題,也經(jīng)常有朋友問我,要成為一個(gè)優(yōu)秀的DBA,應(yīng)該看些什么書。我給大家推薦的第一本書就是《Oracle Concepts》,這也是我唯一能夠推薦給所有人的書。這本書確實(shí)適合任何一個(gè)DBA閱讀,無論你是初學(xué)者還是已經(jīng)工作了很多年的高手。只要你沒有認(rèn)真讀過這本書,你就有必要去讀一遍。
理解Oracle的基本原理有助于你用一種十分理性的思維去考慮問題,在處理問題的時(shí)候能夠更快地抓住問題的本質(zhì)。我們大家在從事DBA工作的時(shí)候,經(jīng)常會(huì)碰到這樣的情形,一個(gè)問題困擾了我們很長時(shí)間,突然猛地一下,你就抓住了問題的關(guān)鍵,然后它就迎刃而解了。而在這之前,我們可能會(huì)做過很多嘗試,這些嘗試有些是有序的,有些是無序的,甚至有些只是瞎蒙。
在這種情況下,有時(shí)候經(jīng)驗(yàn)是幫助不了你的,因?yàn)樗懈鶕?jù)經(jīng)驗(yàn)的分析都已經(jīng)做完了,并且被證明是無效的。這時(shí),我們就只能根據(jù)自己對(duì)問題本質(zhì)的理解去分析,才可能最終解決問題。
事實(shí)上,要想像Oracle一樣思考,首先就需要了解Oracle的本質(zhì)是什么,它是怎么運(yùn)作的,在運(yùn)作過程中,哪些地方可能成為瓶頸。這個(gè)時(shí)候可能就有朋友感到疑惑了:我們?nèi)绾瘟私釵racle內(nèi)部運(yùn)作的原理呢?這看似一個(gè)不可能完成的任務(wù)。確實(shí),在處理有些問題的時(shí)候,我們可能要了解Oracle很深入的算法,但是在絕大多數(shù)情況下,我們分析問題只需要了解一些我們在Oracle官方文檔中提及的原理性的東西,并不需要深入到算法和源代碼級(jí)別。比如說,如果碰到一個(gè)共享池的性能問題,你會(huì)馬上聯(lián)系到共享池、庫緩存(library cache)、字典緩存(rowcache)、CURSOR,以及相關(guān)的一些閂鎖、參數(shù)等,在大多數(shù)情況下這些就可以支撐你做分析了。
但是必須把這些知識(shí)點(diǎn)編織為一張網(wǎng),而不是一個(gè)一個(gè)的知識(shí)點(diǎn)。對(duì)于大多數(shù)DBA來說,想把這些知識(shí)點(diǎn)編織為一張網(wǎng)是比較難的。這需要你花費(fèi)大量的時(shí)間來學(xué)習(xí),而很少有一本書能夠從這個(gè)角度去介紹知識(shí)。因此這種學(xué)習(xí)會(huì)比較困難。在本章,老白將嘗試以這種方式來介紹相關(guān)的知識(shí)點(diǎn),幫助大家從知識(shí)點(diǎn)升級(jí)為一個(gè)立體的知識(shí)體系。
另外,把知識(shí)點(diǎn)融會(huì)貫通不是看書就能達(dá)到的,要想達(dá)到這個(gè)目標(biāo),必須進(jìn)行足夠的實(shí)踐活動(dòng)。你只有在把學(xué)到的知識(shí)應(yīng)用在實(shí)踐中,才可能突破知識(shí)孤島,達(dá)到新的境界。因此,如果你看完第一部分內(nèi)容后,有些知識(shí)點(diǎn)還感覺無法掌握,這也并不要緊,結(jié)合自己碰到的案例思考一下,也許會(huì)更有收獲。
現(xiàn)在我們已經(jīng)進(jìn)入了一個(gè)全新的時(shí)代,Oracle已經(jīng)不是很多DBA今后謀生的主要產(chǎn)品了,我們是否需要像十多年前的DBA一樣去學(xué)習(xí)這些數(shù)據(jù)庫技術(shù)呢?對(duì)于我們這個(gè)歲數(shù)的人來說,可能不大需要了,再過幾年就該退休了。而對(duì)于剛剛?cè)胄械哪贻pDBA們,你們怎么考慮這個(gè)問題呢?