殷文浩
摘 要: 數(shù)據(jù)庫性能預(yù)測具有可利用歷史數(shù)據(jù)較少、受外界不確定性因素影響較大的特點。傳統(tǒng)的構(gòu)建數(shù)據(jù)庫方法有采集數(shù)據(jù)周期長、普通人較難準確掌握、預(yù)測值波動性大等問題。為此探討了一種應(yīng)用數(shù)學(xué)公式,只需采集較少數(shù)據(jù)即可方便快速地預(yù)測數(shù)據(jù)庫性能。使用該方法可以在數(shù)據(jù)庫處于正常工作情況下,對今后一段時期內(nèi)數(shù)據(jù)庫性能做出較為快速準確的預(yù)測,有效預(yù)防未來可能出現(xiàn)的性能問題。
關(guān)鍵詞: 數(shù)據(jù)庫; 性能; 預(yù)測; 公式
中圖分類號:TP392 文獻標(biāo)志碼:A 文章編號:1006-8228(2015)06-01-03
Abstract: Database performance prediction has the characteristics of less available historical data and great affect of the external uncertain factors. The traditional method of building a database has the problems which data collection cycle is long, ordinary people are difficult to grasp, predictive value is volatile ect. This paper introduces an applied mathematics formula, database performance can be predicted rapidly as long as few data is collected. Thus a more accurate prediction of the database performance during the next period of time is made, that effectively prevents the possible performance problems in the future.
Key words: database; performance; prediction; formula
0 引言
隨著信息技術(shù)的飛速發(fā)展,數(shù)據(jù)庫已經(jīng)被應(yīng)用到社會的各個領(lǐng)域,數(shù)據(jù)庫的性能是數(shù)據(jù)庫運行好壞的一個重要技術(shù)指標(biāo)。數(shù)據(jù)庫系統(tǒng)是動態(tài)的,含有各種各樣的事務(wù)類型,這使得對數(shù)據(jù)庫作出準確的性能預(yù)測非常困難。許多IT專業(yè)人員(DBA、項目經(jīng)理、系統(tǒng)集成或開發(fā)人員)在工作中都會碰到需要預(yù)測數(shù)據(jù)庫性能的情況。
本文以筆者單位正在使用的業(yè)務(wù)數(shù)據(jù)庫系統(tǒng)為研究對象,應(yīng)用數(shù)學(xué)預(yù)測公式在系統(tǒng)運行性能數(shù)據(jù)的分析基礎(chǔ)上,對該業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫的性能趨勢作出預(yù)測。根據(jù)預(yù)測結(jié)果,科學(xué)合理的添加系統(tǒng)資源,滿足了系統(tǒng)穩(wěn)定高效運行的需要,化解了數(shù)據(jù)庫性能風(fēng)險,避免了不必要的浪費。
1 相關(guān)知識
1.1 事務(wù)
在預(yù)測性能時,我們需要一個基本工作單元來溝通和計算。我們把這種基本工作單元稱作事務(wù)。在數(shù)據(jù)庫領(lǐng)域?qū)κ聞?wù)有各種各樣的定義,為了敘事清楚,我們把事務(wù)定義為單個邏輯工作單元執(zhí)行的一系列操作,要么完整地執(zhí)行,要么完全不執(zhí)行。事務(wù)處理可以確保除非事務(wù)性單元內(nèi)的所有操作都成功完成,否則不會永久更新面向數(shù)據(jù)的資源。通過將一組相關(guān)操作組合為一個要么全部成功要么全部失敗的單元,可以簡化錯誤恢復(fù)并使應(yīng)用程序更加可靠。一個邏輯工作單元要成為事務(wù),必須滿足所謂的ACID(原子性、一致性、隔離性和持久性)屬性。
1.2 到達率
事務(wù)不僅是一種靜態(tài)的定義,它們還是動態(tài)的。事務(wù)到達一個計算系統(tǒng),就像人到達辦公大樓電梯。我們將到達率定義為:在給定的時間內(nèi)到達的事務(wù)的數(shù)量。我們用到達率來表示一定時間內(nèi)事務(wù)的繁忙程度,在一個系統(tǒng)中,到達率越高,事務(wù)的活動就越多。
我們使用希臘字母λ表示到達率,其單位是某個時間內(nèi)的工作數(shù)量,如每秒50個事務(wù),寫作50trx/s。
1.3 服務(wù)時間
當(dāng)一個事務(wù)進入服務(wù)器后,CPU會立即開始處理這個事務(wù),從開始處理這個事務(wù)到處理完這個事務(wù)所花費的時間,通常被稱為服務(wù)時間并被標(biāo)記為St。例如,如果一個事務(wù)占用150ms的CPU時間,其服務(wù)時間為St=150ms/trx。
1.4 隊列
通常情況下,我們用繁忙度或者利用率來衡量服務(wù)器的忙碌程度。例如,如果一臺服務(wù)器的繁忙時間占65%,那么其利用率為65%。當(dāng)服務(wù)器有70%左右的時間處于繁忙狀態(tài)時,它不能在事務(wù)到來后立即進行處理,這些事務(wù)將被放入到一個隊列中一直保存到它被處理為止。
隊列[2]是一種非常簡單的數(shù)據(jù)結(jié)構(gòu)。它本質(zhì)上是一個包含一個頭部和一個尾部的鏈表。事務(wù)被壓入隊列(入隊)和彈出隊列(出隊)。本文論及到的隊列模型是簡單的先入/先出( FIFO)隊列。
隊列長度用來表示有多少積壓的事務(wù)未被處理。當(dāng)一個事務(wù)在隊列中等待時,它等待Qt的時間。單位是每筆事務(wù)的時間。字母Q表示隊列的長度,它的單位是簡單的事務(wù)數(shù)量。
通常情況下,當(dāng)一個服務(wù)器的繁忙率達到約70%時,就已經(jīng)不能立即處理事務(wù)了,即使服務(wù)器還有30%是空閑的,當(dāng)服務(wù)器變得越來越繁忙時,事務(wù)就會開始排隊,隊列長度會增加,而性能開始下降。
1.5 響應(yīng)時間
當(dāng)一個事務(wù)被提交時,它在整個計算系統(tǒng)中流動并消耗CPU、IO、內(nèi)存和網(wǎng)絡(luò)資源。有時事務(wù)無需在隊列中等待,可以立即得到處理,有時它必須先在隊列中等待。通常情況下,事務(wù)流在整個系統(tǒng)中,需多次地排隊和被處理,直到它完成并退出系統(tǒng)。
在一個事務(wù)的生命周期內(nèi),如果我們將所有的服務(wù)時間和排隊時間累加起來,就可以判斷出事務(wù)在系統(tǒng)中花費的時間,這個時間通常被稱為響應(yīng)時間[6]。簡單的說,響應(yīng)時間就是服務(wù)時間加上排隊時間:Rt=St+Qt。
在對數(shù)據(jù)庫進行性能預(yù)測時,響應(yīng)時間曲線是我們經(jīng)常會用到的技術(shù)之一。
響應(yīng)時間曲線如圖1所示,縱軸是響應(yīng)時間即事務(wù)完成所需要的時間,橫軸是事務(wù)到達率即每單位時間進入系統(tǒng)的事務(wù)數(shù)。從圖1可以看出,當(dāng)事務(wù)到達率達到一定值時,響應(yīng)時間呈幾何級上升(出現(xiàn)拐點),這時系統(tǒng)將極為緩慢甚至不能工作,因此預(yù)測拐點何時在什么條件下會出現(xiàn)是我們預(yù)測工作的重點。
2 預(yù)測
2.1 數(shù)據(jù)收集
數(shù)據(jù)收集[5]是進行數(shù)據(jù)庫性能預(yù)測的必備工作之一,收集到的原始數(shù)據(jù)還必須經(jīng)過必要的轉(zhuǎn)換才能成為對預(yù)測有用的數(shù)據(jù)。在進行數(shù)據(jù)收集時不能過于頻繁,否則會對收集對象的性能產(chǎn)生負面影響。
在需要收集的數(shù)據(jù)中最重要的有兩項,CPU使用率和數(shù)據(jù)庫的工作負載,這里我們假設(shè)操作系統(tǒng)為UNIX,數(shù)據(jù)庫為Oracle。在Oracle數(shù)據(jù)庫中并沒有工作負載這個性能指標(biāo)字段,我們可以用Oracle內(nèi)部統(tǒng)計信息“用戶調(diào)用”(user call)來表示工作負載(即到達率)。
“user call”是一個隨時間而增加的值,要得到工作負載數(shù)據(jù),必須獲取一個初始統(tǒng)計信息快照(S0)和結(jié)束統(tǒng)計信息快照(S1),將兩者之差除以兩次快照之間的時間(T)就可以得到其到達率(λ)。
2.3 使用公式進行預(yù)測
筆者單位某業(yè)務(wù)系統(tǒng)平時用于處理企業(yè)登記、變更和年檢等業(yè)務(wù),由于經(jīng)濟快速發(fā)展,企業(yè)數(shù)量不斷增加,系統(tǒng)處理的業(yè)務(wù)量以每年40%的速度逐年遞增,導(dǎo)致系統(tǒng)的負荷也不斷加重。領(lǐng)導(dǎo)擔(dān)心數(shù)據(jù)庫系統(tǒng)會承受不住,因此需要對現(xiàn)有數(shù)據(jù)庫系統(tǒng)做一次性能預(yù)測,并提供解決方案。
首先運行前文所提到的數(shù)據(jù)收集腳本,收集到數(shù)據(jù)庫在正常情況下事務(wù)的平均到達率是6.11trx/s,CPU平均利用率是35%,CPU的數(shù)量是12,將這些數(shù)字代入基本預(yù)測公式:
假設(shè)CPU處理一個事物的服務(wù)時間St始終保持不變,得出當(dāng)平均到達率為6.11trx/s時,每個事務(wù)的平均響應(yīng)時間為0.69s,以此作為一個基線填入表2的第一行,然后每次將平均到達率增加20%代入公式,計算出平均響應(yīng)時間如表2。
圖1是根據(jù)表2得到的響應(yīng)時間曲線圖[3],橫軸是到達率,縱軸是預(yù)測的響應(yīng)時間。根據(jù)表2可以得知,當(dāng)利用率在70-80%時,響應(yīng)時間開始顯著增加,這時到達率大約是13,這正是圖形上開始進入曲線肘部的時刻。
我們根據(jù)圖表預(yù)測的數(shù)據(jù)得到以下兩點結(jié)論。
⑴ 當(dāng)負載增加超過一倍時,系統(tǒng)的反應(yīng)將變得緩慢。
⑵ 當(dāng)負載增加接近兩倍時,系統(tǒng)將變的幾乎不可用。
根據(jù)以上結(jié)論,再結(jié)合業(yè)務(wù)量每年增加40%的事實,領(lǐng)導(dǎo)可以得知到第三年時系統(tǒng)會變得緩慢,到第四年時系統(tǒng)將變的幾乎不可用。
2.4 應(yīng)對措施效果預(yù)測
為了防止系統(tǒng)變慢,可以通過更換系統(tǒng)或添加CPU來解決,前者效果好但花費較大,后者節(jié)省費用但效果未知。此時可以利用預(yù)測公式[3]對添加CPU后的效果做出預(yù)測,為應(yīng)對措施的選擇給出理論上的依據(jù)。
該系統(tǒng)數(shù)據(jù)庫服務(wù)器有16個插槽,已經(jīng)使用了12個,還可以添加4個使CPU總數(shù)達到16,即M=16。
我們將原系統(tǒng)St=0.69,以及原系統(tǒng)開始變慢時的到達率λ=13.442代入公式可得:
U===0.579
Rt===0.690
我們發(fā)現(xiàn)當(dāng)添加了4個CPU后,系統(tǒng)繁忙度從0.773下降到0.579,響應(yīng)時間從0.723s下降到0.690s,系統(tǒng)沒有變慢。
我們再把原系統(tǒng)變的不可用時的到達率λ=18.330代入上述公式可得系統(tǒng)繁忙度從1.054下降到0.790,響應(yīng)時間從幾乎無響應(yīng)下降到0.706s,系統(tǒng)幾乎沒有變慢。
根據(jù)上述預(yù)測結(jié)果可以得知,該業(yè)務(wù)系統(tǒng)只需升級CPU就可以完全滿足未來五年的業(yè)務(wù)發(fā)展需要。
2.5 實際效果
由于商事登記制度改革,新登記企業(yè)的數(shù)量呈現(xiàn)井噴式增長,原數(shù)據(jù)庫系統(tǒng)提前一年達到了滿負荷運行狀態(tài),系統(tǒng)繁忙度接近1,響應(yīng)時間接近4秒。為了防止系統(tǒng)繼續(xù)變慢,保障商事登記制度改革順利推進,我們根據(jù)前期預(yù)測結(jié)果,為數(shù)據(jù)庫添加了4個CPU。添加CPU后,再次對數(shù)據(jù)庫系統(tǒng)進行跟蹤測試,結(jié)果發(fā)現(xiàn)系統(tǒng)繁忙度下降到0.58,響應(yīng)時間下降到0.6s,完全符合預(yù)測,順利解決了數(shù)據(jù)庫的瓶頸問題。
3 結(jié)束語
本文介紹了到達率、服務(wù)時間、響應(yīng)時間等一些數(shù)據(jù)庫性能預(yù)測的基本知識和概念[1],討論了一些常用的預(yù)測公式并且就這些理論的具體運用進行了較詳細的研究和論述。本文的研究結(jié)果在筆者單位的數(shù)據(jù)庫系統(tǒng)上得到了成功應(yīng)用,保障了數(shù)據(jù)庫平穩(wěn)運行,避免了盲目的升級替換,節(jié)約了寶貴的項目經(jīng)費,實現(xiàn)了較好的經(jīng)濟和社會效益。
由于在數(shù)據(jù)庫實際預(yù)測工作中經(jīng)常會遇到樣本采集數(shù)量不足、采集時間不平均或采集方式不對等因素干擾,造成數(shù)據(jù)庫性能預(yù)測不準,因此,下一步考慮引進Erlang C公式來進一步加強數(shù)據(jù)庫性能預(yù)測的準確性和抗干擾性。
參考文獻:
[1] 陳虹.模型預(yù)測控制[M].科學(xué)出版社,2013.
[2] 席裕庚.預(yù)測控制(第2版)[M].國防工業(yè)出版社,2013.
[3] 李海翔.數(shù)據(jù)庫查詢優(yōu)化器的藝術(shù)[M].機械工業(yè)出版社,2014.
[4] 李少遠.全局工況系統(tǒng)預(yù)測控制及其應(yīng)用[M].科學(xué)出版社,2008.
[5] 加西亞-莫利納著,楊冬青等譯.數(shù)據(jù)庫系統(tǒng)實現(xiàn)[M].機械工業(yè)出版
社,2010.
[6] 博克斯著,王成璋等譯.時間序列分析:預(yù)測與控制[M].機械工業(yè)出版
社,2011.