天天看點

《Oracle資料庫性能優化方法論和最佳實踐》——第1章 Oracle性能優化漫談 1.1 從生活場景漫談性能優化

本節書摘來自華章計算機《oracle資料庫性能優化方法論和最佳實踐》一書中的第1章,第1.1節,作者:柳遵梁 潘敏君 應以峰著,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

oracle資料庫性能優化一直是一個讓人既膽怯又興奮的話題,在初級dba眼裡,這是一個神秘的領域,即使是資深的oracle dba,也可能無法描述清楚性能優化究竟要做什麼,應達成什麼目标。那麼性能優化究竟是做什麼的呢?簡而言之,性能優化就是讓我們的工作速度變快,快到讓我們滿意為止。自然,又有讀者會問了,我們的工作是什麼呢?什麼程度才算快,是否可以衡量?看,頭疼的問題又來了。

1.1.1 從一個真實病例說起

下面是本人的真實經曆,也許很能夠說明一些問題:

不知道從什麼時候起,我開始頭疼,主要是半邊頭疼,有時候會伴随眼睛疼和牙齒疼,疼痛順序一般為頭疼→眼睛疼→牙齒疼。當持續頭疼根本不能夠工作的時候,我去看醫生了。先到神經内科做了腦部ct檢查之後,醫生說沒有多大問題,估計是壓力大、勞累導緻供氧不足,屬于亞健康狀态,要多鍛煉。腦部沒問題當然很開心,不過疼痛的問題依然沒有解決,最終導緻無法工作。既然可能是最近太累的緣故,那麼選擇給自己放假,到三亞去度假。到三亞的第二天,頭疼就消失了,我很開心地認為确實是前段時間太累了。在三亞呆的這段時間,一直沒有頭疼過。

可回來上班後不久,我頭疼的毛病又開始發作,隻能繼續上醫院。這次去了腦外科,醫生檢查之後也沒看出什麼毛病,開了一些老年人服用的舒緩血管的藥,看看是否有效。藥吃完了,頭疼依舊。老婆給我買了一些蟲草,以加強供氧和營養。吃了1個月的蟲草後,居然頭疼病好多了。我再次到腦外科看醫生,醫生不認可吃蟲草對頭疼有好處。我問醫生,是否有可能是牙齒疼痛引起的,醫生同樣不認可。

由于我有鼻窦炎的老毛病,是以就去耳鼻喉科看醫生。耳鼻喉科的醫生看了之後,初步判斷是鼻窦炎引起的頭疼,說需要連續吃3個月左右的藥。在頭疼難當的情況下,我堅持吃了3個月治療鼻窦炎的藥,可惜頭疼依舊,而鼻窦炎已經極其輕微了,我再次提出牙齒的問題,醫生同樣不認可。耳鼻喉科不行,我開始找眼科醫生看。經過眼科醫生全面的檢查之後,認為眼睛有些發炎,但應該不會與頭疼産生關聯。無論如何,我還是堅持點眼藥水,吃藥。

後來公司體檢,由于牙齒會疼,是以順便看了牙科醫生。我再次提起牙齒庝是否會引起頭疼的問題,醫生表示應該關系不大,不過表示可以把牙神經腐爛掉以看看是否存在關聯。非常神奇的是,醫生在把牙神經腐爛之後,我的頭疼立即消失了,基本确認了牙齒疼和頭疼之間的關系。

畢竟是關系到腦部的大事,還是不放心。我有一個腦外科的同學回國之後,我馬上去找他,再次确認了腦部沒有問題,也确認了牙齒疼是有可能會引起頭疼的,而且同樣的神經也會導緻眼睛疼。

人體是一個高度協作的有機生命體,任何一個環節出現問題,就可能會導緻不舒服。oracle資料庫雖然沒有人體複雜,但也是一個高度協作的同步系統,任何一個環節出現問題,都有可能導緻最終的業務系統性能變慢。為什麼性能的優化就像某些疾病的診斷一樣,處理起來如此困難,原因主要有以下兩點:

無論是醫生還是dba,都習慣于以部件分解的方式來看待問題。醫生把人體分解成為一個個獨立的器官;dba把oracle資料庫分解成了執行個體、sga、資料庫以及更細的部分。

醫生要對人體工作流程機制有全局性的認識,還要了解生命體生存的全局影響要素和依賴性,才能準确判定病源在哪裡。而對于dba來說,同樣也要在掌控資料庫的全局依賴性、全局同步協作處理及具體業務流程的情況下,才能真正将oracle的性能優化提高。

正是因為這兩個方面的原因,導緻專科醫生和精通故障處理的dba很難很好地從表象透析本質,進而找到最恰當的解決辦法。

相信大家從上述案例中已經很清晰地看到性能優化和故障解決的差別:性能優化關注全局和流程,以及流程之間的協調性;而故障解決關注局部和局部的有效性。

1.1.2 如何改善寶馬汽車的運作速度

想象這樣一幅畫面:一輛性能優異的寶馬汽車,以時速100km輕松地行駛在路上,一路風光無限好。可不知從什麼時候起,它的速度漸漸慢了下來,從時速100km減到95km,再減到80km、60km、40km,似乎還有繼續減慢的趨勢。如果這時請你猜猜是什麼原因導緻的,你會如何判斷?可能很多人的第一想法是車壞了,但如果我告訴你車看起來依然光鮮,自動化檢查也提示汽車沒有任何問題呢?你又會想到什麼?馬路變窄?如果我說走的是一條8車道的馬路呢?是不是有點傻眼了?

假設就在我們分析問題的這個時段,車速突然又加快了,時速逐漸恢複到100km,而且持續觀察一段時間,比如30分鐘,發現它已經穩定在了100km,似乎一切都正常了,讓人不禁歡喜。但是,如果你是一位dba,相信在這個時候,不會就此放過前面的問題,職業習慣會讓你心存疑慮:為什麼寶馬汽車會有一段時間速度不正常,到底是什麼導緻的,下次會不會再次出現?

寶馬汽車在馬路上的運作狀況是最為典型的業務性能優化場景,作為一個性能優化者,必須要明晰是什麼原因導緻這種情況的,并且應了解該如何進行改善。

每個人都習慣從自己的專業知識角度去分析問題,有句話說得好,我手中隻有一個錘子,那我看哪裡都是釘子,總要讓我的錘子發揮作用吧。事實上,如果我們的視野從寶馬汽車上移開,也許問題就會豁然開朗。寶馬汽車性能優異,保養良好,可這并不是跑得快的唯一前提,一輛汽車的行駛速度是由很多因素決定的:汽車性能及狀況、司機的技能和狀态甚至心情、當時的路況、天氣等,這些要素共同決定了汽車會以什麼樣的速度運作。

作為一個性能優化工作者,可能也會面對類似上面的問題:業務系統突然跑得慢了,可是我的系統沒有問題啊,資料庫也沒有任何問題呀,到底是怎麼回事呢?資料庫就好比是寶馬汽車行駛時的馬路,不過,這條馬路并不是寶馬汽車的專用通道,還會有其他車輛(如拖拉機)在行駛。我們不能說馬路有8車道寶馬汽車就一定跑得快,因為跑在馬路上的其他汽車以及天氣的變化,甚至行人都有可能左右寶馬汽車的速度,比如,汽車變道甚至發生碰撞,天色變暗、打雷下雨以及暴雨或大霧,行人過馬路等都會對車速有影響。我們也不能說速度變慢了就增加車道(如從4車道變成8車道),經驗告訴我們,再寬的馬路也會堵車,再好的汽車也會抛錨。性能優化工作者從某種程度上來說就相當于交警,他要根據馬路上的繁忙程度進行排程,該快的快,該慢的慢,該拖車的拖車,該變道的變道,需要從8通道變成12通道的時候也要勇敢提出來。同時,他也要知道不能把台風天的汽車行駛速度和豔陽天進行比較,即使是同一輛汽車或同一個司機或同一條馬路或同樣的擁塞。