冷友方
摘 要:數(shù)據(jù)庫性能優(yōu)化一直是IT領域的一個大課題。結合工作經(jīng)驗及問題總結,列出傳統(tǒng)數(shù)據(jù)庫優(yōu)化方法中的一些誤區(qū),并提出一種全新的優(yōu)化方法:面向業(yè)務需求的數(shù)據(jù)庫性能優(yōu)化方法。包括以下幾個過程:問題的引出,部析優(yōu)化目的,探討優(yōu)化方法,采集實驗數(shù)據(jù),建立優(yōu)化模型,建立優(yōu)化過程;通過這幾個過程的循序漸進,層層深入,探索了這種優(yōu)化方法的來源,建立方法,應用方法等等,給數(shù)據(jù)庫的優(yōu)化引出一個全新的研究方向。
關鍵詞:數(shù)據(jù)庫 性能優(yōu)化 信息技術 性能評估
中圖分類號:TP392 文獻標識碼:A 文章編號:1007-3973(2013)007-060-03
1 問題引出
很多IT技術人員一提到數(shù)據(jù)庫調優(yōu),首先想到的就是如何調整CPU、內存、IO等問題,以技術細節(jié)做為出發(fā)點,很多已有的數(shù)據(jù)庫調優(yōu)文獻都是如出一撤,教的是如何調整這些參數(shù),但筆者在多年的數(shù)據(jù)庫調優(yōu)摸索中逐漸發(fā)現(xiàn),其實調優(yōu)的出發(fā)點不應該是技術參數(shù),而是業(yè)務需求,具體來說,就是從數(shù)據(jù)庫所服務的應用程序的業(yè)務類型和業(yè)務量出發(fā)。
打個比方,拿道路堵車方案來做類比:
數(shù)據(jù)庫的優(yōu)化方案就如同治理堵車方案一樣,道路就是數(shù)據(jù)庫,如果道路有2個車道,當只有非常少量的車在上面跑,一點也不堵,那性能肯定能打100分。
但如果同時跑海量的車在這2個車道上面,肯定堵得一塌糊涂,性能只能得0分。
同一條道路,性能評分有天壤之別,為什么呢?關鍵不在這條道(數(shù)據(jù)庫)上,而在承載的車量(業(yè)務量)上面。
所以基于這個想法,筆者認為優(yōu)化的出發(fā)點不應該是數(shù)據(jù)庫,而是先分析業(yè)務模型。針對業(yè)務模型,再給出具體的數(shù)據(jù)庫優(yōu)化方案。
1.1 傳統(tǒng)的數(shù)據(jù)庫優(yōu)化工作存在的問題
傳統(tǒng)的數(shù)據(jù)庫優(yōu)化工作中,存在以下幾點問題:
(1)數(shù)據(jù)庫優(yōu)化切入點:SQL/參數(shù)/CPU/Memory/IO不合理。
在傳統(tǒng)的數(shù)據(jù)庫優(yōu)化方法中,技術人員腦海中首先閃現(xiàn)的就是sql寫得有問題,要么就是參數(shù)設置有問題,再或者是硬件配置是否太小,這些都會把調優(yōu)人員引入技術細節(jié)的歧途,也使得旁觀者和初學者覺得調優(yōu)工作是一件極其復雜的工作,從而望而生畏。
(2)沒有固定的優(yōu)化過程或模型。
如果切入點沒找準,在進行具體的優(yōu)化工作時,到底是SQL需要改寫?亦或是參數(shù)需要調整?再或者是CPU需要提速?等等這一切,說明切入點越多,優(yōu)化步驟和優(yōu)化方向越迷茫,往往不能做到軟件和硬件的協(xié)調統(tǒng)一。
(3)優(yōu)化結果不可評估和量化。
傳統(tǒng)的優(yōu)化工作有時可以解決當前問題。但解決之后,給出的方案效果如何,如何評估?解決了當前問題,會不會引入其它問題?
1.2 本文的不同點
本文在做優(yōu)化的過程中,有以下幾個不同點:
(1)徹底拋開傳統(tǒng)優(yōu)化問題的切入點,以業(yè)務做為切入點。
正所謂知已知彼,百戰(zhàn)不怠。在尋求優(yōu)化切入點的問題上,也需要做到知已知彼。所謂知已,就是收集數(shù)據(jù)庫自身的靜態(tài)信息,其中包括數(shù)據(jù)庫的輯邏結構和物理結構、數(shù)據(jù)量等等。所謂知彼,就是收集來自數(shù)據(jù)庫之外的動態(tài)信息,在不同的時段,都有什么業(yè)務,業(yè)務量有多大,這些業(yè)務都發(fā)出了哪些數(shù)據(jù)庫請求,以及數(shù)據(jù)庫的響應時間等等。
(2)給出了一個可重用的優(yōu)化過程模型。
傳統(tǒng)的優(yōu)化工作基本沒有可重復使用的過程可以參考,使得優(yōu)化工作只能是一些經(jīng)驗非常豐富的人員才能完成的工作。本文在基于業(yè)務做為出發(fā)點的前提下,給出了一個可以重復使用的優(yōu)化過程模型,從而使即使初級的IT人員也可以遵循這個過程進行優(yōu)化工作,提高了工作效率。
(3)優(yōu)化結果可以量化。
本文提出了“響應時間-資源-業(yè)務”三要素的評價模型。響應時間是目標,資源是限制條件,業(yè)務是事實,基于這個模型來量化系統(tǒng)得分,從而評價優(yōu)化結果。
2 剖析優(yōu)化目的
2.1 優(yōu)化目標:提高響應速度
隨著信息化的迅速發(fā)展,信息技術已經(jīng)逐漸發(fā)展成為一種服務。近年來,IT服務的理念已經(jīng)深入人心,云服務也開始遍及。各種理論研究,如IT服務管理(IT Service Management),ITIL(IT Infrastructure Library),QoS(Quality of Service服務質量),Cloud Computing(云計算)等等,都是圍繞“IT即服務”的理念展開的,它們都詳盡闡述了如何建立服務模型,提高服務質量。毫不例外,數(shù)據(jù)庫作為信息的存儲中心,向應用程序提供數(shù)據(jù)的存取服務,當然也是一種服務。
當數(shù)據(jù)庫作為一種服務時,應用程序無需知道數(shù)據(jù)存放的磁盤位置,數(shù)據(jù)的組織結構,以及發(fā)出數(shù)據(jù)請求(如SQL)時數(shù)據(jù)庫的具體算法。對應用程序來說,它只關心為其提供服務的數(shù)據(jù)庫的存取速度,即響應時間。所以在數(shù)據(jù)庫優(yōu)化中,最核心的目標就是提高響應速度,即減少響應時間。
2.2 優(yōu)化思路:以資源換時間
確定了提高響應速度的優(yōu)化目標之后,就需要提出提高響應速度的方法。
在談優(yōu)化思路之前,先說一下經(jīng)濟學中的資源的稀缺性,在經(jīng)濟學領域中,研究的核心概念是“資源的稀缺性”:即整個社會的資源是有限的,資源的數(shù)量不足以滿足人們的所有需要;而經(jīng)濟學就是研究如何實現(xiàn)稀缺資源的有效利用和合理配置,以使人類的需要得到最大限度滿足的科學。
資源的有限性是經(jīng)濟學的核心內容,經(jīng)濟學研究的是整個人類社會的資源,而IT領域屬于整個人類社會的一部分,同樣也存在資源的有限性。在IT領域中,計算需要的資源包括CPU資源,內存資源,I/O資源,以及網(wǎng)絡資源等等。由于這些資源的有限性,在提高響應速度時,有兩種思路可以遵循:
(1)優(yōu)化算法,減少使用的資源。
例如優(yōu)化SQL,改變其執(zhí)行計劃,使其利用更少的計算過程完成同樣的任務,從而提高響應時間。
(2)分配更多的資源。
從服務器所擁有的資源來說,分配更多資源分為以下幾方面:
1)如果數(shù)據(jù)庫的命中率很低,說明內存分配得比較少,很多數(shù)據(jù)都需要從硬盤上讀取,此時可以為數(shù)據(jù)庫分配更多的內存,使其直接從內存讀取數(shù)據(jù)。這是一種以內存換時間的方法。
2)數(shù)據(jù)庫中的索引技術本身就是一種數(shù)據(jù)冗余,但它能提高對特定列的檢索速度,是一種以磁盤空間換時間的方法。
3)并行運算,就是利用更多地CPU協(xié)同完成一個任務,是以CPU換時間的方法。
不管是以CPU、內存、以及磁盤空間哪種方式來提高性能的方法,都是以資源來換取響應時間,因此,數(shù)據(jù)庫的核心優(yōu)化思路即是“以資源換時間”。
3 優(yōu)化模型的建立
3.1 響應時間、資源、業(yè)務量三者之間的博弈關系
響應時間,資源以及業(yè)務量三者之間是存在一定的博弈關系的,舉幾個現(xiàn)實中的實例便可以定性地看出三者的關系,現(xiàn)在電子商務已經(jīng)逐漸普及并且滲透到我們的日常生活中,所以拿電子商務來舉例會更容易理解:
關系一:在資源固定的情況下,持續(xù)增加業(yè)務量,響應時間勢必會增加。
Example 1:某個電商網(wǎng)站A商城,服務器資源是固定的,平時日訪問量為100萬用戶,轉化率為30%;如果在十一節(jié)假日采取了大量的促銷優(yōu)惠活動,比如打5折,并且此前做了充分的廣告來宣傳此活動,那么到了十一這一天,訪問量肯定會巨增,如果訪問量達到500萬用戶,并且轉化率提高到80%,可以預見其響應速度勢必會降低,系統(tǒng)甚至會癱瘓。
關系二:在特定的業(yè)務量下,為了減少響應時間,必須增加更多的資源。
Example 2:拿鐵路售票系統(tǒng)12306為例,在春運等高峰期,經(jīng)常登陸會堵塞,而鐵道部為了解決這個問題,在二期的改造中,耗資幾個億來增加硬件資源的投入。
關系三:在保證響應時間不變的前提下,如果增加更多的資源,則系統(tǒng)能支持的業(yè)務量會增加。
Example 3:一個設計優(yōu)化的系統(tǒng)在設計初期,不僅要考慮到當前支撐的業(yè)務量,還要考慮到系統(tǒng)的可擴展性,用來滿足將來能支撐更多的業(yè)務量。
在現(xiàn)實世界中,人們對信息服務的質量會越來越高,也就是對響應速度的要求只增不減。系統(tǒng)的業(yè)務量也會隨著信息技術的普及而客觀增長,而資源卻是有限的,這是需要在三者之間做出權衡抉擇,給出一個合理的抉擇結果,這個抉擇的結果正是優(yōu)化方案。
3.2 模型建立
上一小節(jié)討論了資源、業(yè)務量、響應時間三者之間的定性關系,如果需要具體的優(yōu)化方案,就需要建一個的可量化的模型,也就是三者之間的定量關系。本小節(jié)中通過實驗的方式來獲取數(shù)據(jù),用于驗證上一小節(jié)提出的三種關系。
需要從兩個方向來采集數(shù)據(jù):
(1)一方面,資源配置不變的前提下,獲取系統(tǒng)當前的實際業(yè)務量q,然后通過壓力測試軟件,如loadrunner,錄制業(yè)務腳本,通過加大系統(tǒng)壓力來摸擬業(yè)務量增加的情況,實時采集系統(tǒng)響應時間t。
(2)另一方面,在特定業(yè)務量情況下,通過調整資源大小s,實時采集系統(tǒng)響應時間t。
通過以上兩個方向的數(shù)據(jù)采集,就可以得出,在各種不同的資源以及不同的業(yè)務量情況下,系統(tǒng)的響應時間。
由于資源的多樣性以及資源限制,如果使用多種資源的變化組合,數(shù)據(jù)將程現(xiàn)出多維狀況,為了簡化我們提出的“資源-業(yè)務量-響應時間”三維模型,在做實驗的過程中,僅僅使用虛擬機來調整單一資源,即CPU的個數(shù)來驗證我們的模型,實驗結果如表1所示。
表1 實驗數(shù)據(jù)采集
圖1 響應時間隨著業(yè)務量和資源量的變化趨勢
說明:通過表1的數(shù)據(jù),繪出圖1的圖表。圖表1中,橫軸是業(yè)務量(單位:萬),縱軸是響應時間(單位:秒),藍線為2cpu,紅線為1cpu。
從圖表1中可以看出:
(1)2CPU的響應時間比1CPU響應時間要小一倍左右,驗證了資源對響應時間的影響關系。
(2)在相同的CPU數(shù)量上,當業(yè)務量增長時,響應時間程現(xiàn)出增長的趨勢,驗證了業(yè)務量對響應時間的影響。
(3)橫向比較響應時間保持不變的情況(取40s),可以看出,如果增加資源的數(shù)量,從1CPU到2CPU,則支持的業(yè)務量也從4萬增加到10萬。
通過實驗我們采集到了三者之間的數(shù)據(jù),運用線性回歸算法,就可以給出響應時間t和資源s以及業(yè)務量q之間的函數(shù),稱之為性能函數(shù):
t=F(s,q)
得出此性能函數(shù)后,三者之間的定量關系就出來了,就能知道每增加一定量的資源,系統(tǒng)的響應時間會減少多少,或每增加一定量的業(yè)務量,系統(tǒng)的響應時間又會增加多少。系統(tǒng)架構師就可以依據(jù)此函數(shù)來準確地制定優(yōu)化方案。
4 模型應用
性能函數(shù)t=F(s,q)有以下幾種非常實用的應用場景:
4.1 計算要達到理想響應時間需要投入的資源
通過調研獲取用戶的目標響應時間T,采集到當前的業(yè)務量Q,通過性能函數(shù)T=F(s,Q)的運算就可以得出需要投入的系統(tǒng)資源S。
4.2 預測當業(yè)務增長后,資源的投入情況
確定了用戶的目標響應時間T,預測為了滿足將來業(yè)務量持續(xù)增長時,需要新投入的資源情況,使系統(tǒng)在設計初期充分考慮其可擴展性。
4.3 為系統(tǒng)評分
通過系統(tǒng)當前實際的資源S和業(yè)務量Q,算出理論響應時間T,并采集系統(tǒng)的實際響應時間t1,調查產(chǎn)生用戶對系統(tǒng)的零容忍響應時間t0,即:如果響應時間大于t0,則認為系統(tǒng)得分為0,然后為系統(tǒng)打分。評分公式如下:
(t0-t1/t0-T)*100
例:通過函數(shù)運算,系統(tǒng)理論上響應時間為1s,用戶對系統(tǒng)的零容忍響應時間為3s, 而系統(tǒng)實際響應時間為1.5s,那么此系統(tǒng)打分為:
(3-1.5)/(3-1)*100=75
說明:當?shù)梅譃樨摂?shù)時,表明此時響應時間已經(jīng)超過用戶的零容忍響應時間。當?shù)梅执笥?00時,表明此時響應時間表現(xiàn)很好,比理論響應時間還小。
5 優(yōu)化過程
作為專業(yè)的數(shù)據(jù)庫工作者,筆者在實際工作中,經(jīng)常遇到有IT人員談到數(shù)據(jù)庫性能問題時,總是望洋興嘆,認為數(shù)據(jù)庫優(yōu)化神秘而不可觸,有時甚至寄希望于有一種通用的方法,或者打開一個優(yōu)化開關,或調整一兩個參數(shù)就可以快速解決當前問題。我們應該認識到,不同的系統(tǒng)對響應時間的要求不一樣,資源也不一樣,業(yè)務類型和業(yè)務量更是千差萬別,因此,優(yōu)化工作中沒有銀彈(Silver Bullet),也沒有通用的開關,必須以系統(tǒng)工程的理念進行優(yōu)化工作。
既然優(yōu)化工作中沒有銀彈,在明確了以響應速度作為優(yōu)化目標,以資源換時間作為優(yōu)化思路,以及“速度-資源-業(yè)務量”三者之間的量化關系后,就需要建立一套切實可用的優(yōu)化過程,來得出優(yōu)化方案。
具體的優(yōu)化過程如下:
(1)獲取系統(tǒng)當前的資源情況以及業(yè)務量數(shù)據(jù)。
(2)建模推導出性能函數(shù)t=F(s,q)。
(3)確定優(yōu)化方案。
得出性能函數(shù)t=F(s,q)后,求解優(yōu)化方案就變成一個數(shù)學問題,確定了其中兩個參數(shù),就可以求解出第三個參數(shù),三個參數(shù)的不同組合即為不同的優(yōu)化方案,我們可以權衡抉擇來選出折中的方案。
(4)實施方案。
(5)評估優(yōu)化結果。
最后,通過4.3小節(jié)給出的評分標準來給優(yōu)化方案打分,如果不滿意則繼續(xù)選擇備用方案并評分,直到最終找出最合適的優(yōu)化方案,那么優(yōu)化過程也就結束了。
6 結束語
本文結合筆者長期的數(shù)據(jù)庫工作經(jīng)驗,總結了響應時間、資源和業(yè)務量三者之間的博弈關系,并在此關系的基礎上,通過實驗采集大量的數(shù)據(jù),并結合線性回歸算法得出三者之間的關系函數(shù),以此模型來指導數(shù)據(jù)庫的優(yōu)化工作。并給出了此模型的三種應用:解決當前問題、預測將來的性能擴展問題、為系統(tǒng)評分。在最后,說明了數(shù)據(jù)庫性能優(yōu)化沒有銀彈,并給出了性能優(yōu)化的過程模型。
但本方法由于受到一些因素的限制,仍有需要改進的地方:
(1)資源大小的調整需要大量的硬件支撐,由于實驗環(huán)境的限制,目前只能調整比較有限的資源。
(2)在評估優(yōu)化結果時,理想響應時間和零容忍響應時間因人而異。
這些不足之處需要進一步地研究。
參考文獻:
[1] 蔣洪迅,楊永艷,蘇俊.IT系統(tǒng)管理中多應用綜合性能優(yōu)化的建模研究[J].計算機工程與應用,2007(27).