王志海
(中通服網(wǎng)優(yōu)技術(shù)有限公司,上海 200050)
隨著移動互聯(lián)網(wǎng)的迅速發(fā)展,運(yùn)營商成為一個海量信息的制造者和處理者,信息的爆炸式增長速度已遠(yuǎn)遠(yuǎn)超過比摩爾定律。由于IT環(huán)境日趨復(fù)雜,數(shù)據(jù)量暴增,給電信運(yùn)營支撐系統(tǒng)帶來了巨大的壓力,傳統(tǒng)的IT系統(tǒng)出現(xiàn)不同程度的性能問題亟待解決。
無線網(wǎng)絡(luò)優(yōu)化平臺是運(yùn)營商重要的IT支撐系統(tǒng),需要抽取各廠商設(shè)備的性能、參數(shù)、告警、話單等各類數(shù)據(jù)源,3G的快速發(fā)展使得用戶上網(wǎng)記錄數(shù)據(jù)快速增長,逐月呈現(xiàn)指數(shù)級增長速度,給數(shù)據(jù)平臺帶來了巨大的壓力,數(shù)據(jù)加載、數(shù)據(jù)處理和數(shù)據(jù)查詢出現(xiàn)不同程度的性能下降,網(wǎng)絡(luò)優(yōu)化平臺運(yùn)維工作面臨巨大壓力和嚴(yán)峻挑戰(zhàn)。如何解決性能下降,保證系統(tǒng)平穩(wěn)運(yùn)行成為平臺運(yùn)維支撐的首要任務(wù)。
不同系統(tǒng)會有不同的資源需求,當(dāng)資源需求不能滿足時,便會產(chǎn)生不同性能瓶頸。系統(tǒng)資源中的CPU、內(nèi)存、磁盤和網(wǎng)絡(luò)都有可能成為性能瓶頸。要確定一個系統(tǒng)的性能瓶頸,可以通過逐項排查進(jìn)行問題診斷,在此基礎(chǔ)上進(jìn)行問題分析和定位。
通常系統(tǒng)資源在達(dá)到一定利用率時便會對系統(tǒng)性能產(chǎn)生嚴(yán)重影響,不同的系統(tǒng)和硬件可能會對資源利用率的定義有所不同。CPU僅僅只能決定運(yùn)算速度,即使是運(yùn)算速度都還取決于與內(nèi)存之間的總線帶寬以及內(nèi)存本身的速度;內(nèi)存大小決定了所能緩存的數(shù)據(jù)量,主要決定了熱點(diǎn)數(shù)據(jù)的訪問速度;磁盤的轉(zhuǎn)速決定了每次I/O請求的延時時間。硬件資源所能提供的處理能力一定是它們多方面共同決定的整體能力,任何一個方面出現(xiàn)瓶頸,都能導(dǎo)致整體性能出現(xiàn)下降。
系統(tǒng)資源中,CPU負(fù)責(zé)所有計算任務(wù),是最重要的一個子系統(tǒng),基于摩爾定律,CPU是發(fā)展最快的一個硬件,所以瓶頸很少出現(xiàn)在CPU上。對于無線網(wǎng)絡(luò)優(yōu)化平臺,線上環(huán)境通常是配置較好的小型機(jī)做RAC,CPU資源充裕,通過診斷觀察顯示CPU的利用率持續(xù)保持在20%以下,利用率很低,CPU出現(xiàn)性能瓶頸的情況基本排除。通過對內(nèi)存的檢查發(fā)現(xiàn),物理可用內(nèi)存free持續(xù)維持在大于20%的范圍內(nèi),數(shù)據(jù)庫實例的內(nèi)存利用率也在80%以下,故內(nèi)存出現(xiàn)性能瓶頸的情況也可以排除。一般來說,應(yīng)用與數(shù)據(jù)庫之間的網(wǎng)絡(luò)交互所需的資源并不是非常大,所以這個環(huán)境遇到瓶頸的可能也并不是非常大。平臺運(yùn)行在運(yùn)營商內(nèi)部局域網(wǎng)通常采用千兆帶寬,通過對線上網(wǎng)絡(luò)環(huán)境的檢查也排除網(wǎng)絡(luò)資源瓶頸的可能。
對于數(shù)據(jù)庫系統(tǒng),如果數(shù)據(jù)保存在磁盤中,磁盤性能對于系統(tǒng)性能就非常重要;如果要對流數(shù)據(jù)進(jìn)行壓縮和解壓縮,CPU的速度和內(nèi)存容量也非常重要。由于無線網(wǎng)絡(luò)優(yōu)化平臺數(shù)據(jù)庫要傳輸和讀取大量的數(shù)據(jù),因此磁盤比CPU、內(nèi)存等更加重要。
無線網(wǎng)絡(luò)優(yōu)化平臺采用單I/O節(jié)點(diǎn)服務(wù)多個計算節(jié)點(diǎn)的模式。數(shù)據(jù)都存儲在I/O節(jié)點(diǎn)上,系統(tǒng)發(fā)起一個計算任務(wù)時,首先將計算任務(wù)分配給多個計算節(jié)點(diǎn),而每個計算節(jié)點(diǎn)又要訪問同一個I/O節(jié)點(diǎn)以獲取請求的數(shù)據(jù)。這樣I/O節(jié)點(diǎn)的負(fù)載在整個數(shù)據(jù)請求和返回過程中都非常大,要處理所有計算節(jié)點(diǎn)發(fā)來的請求,而計算節(jié)點(diǎn)只需要等待I/O的返回結(jié)果,處理自身分配的計算任務(wù),負(fù)載非常小。當(dāng)請求的數(shù)據(jù)量以及查詢數(shù)據(jù)量越大時,I/O的負(fù)載和處理壓力就越大。當(dāng)需要處理的數(shù)據(jù)急劇增長時,I/O效率就會嚴(yán)重下降,出現(xiàn)瓶頸。因此,改進(jìn)I/O效率成為問題解決的關(guān)鍵所在。
運(yùn)營商IT支撐系統(tǒng)性能問題的解決思路通常有:一是優(yōu)化系統(tǒng)、深化設(shè)計,通過技術(shù)設(shè)計解決或緩解當(dāng)前性能問題;二是技術(shù)架構(gòu)的重構(gòu),引入新技術(shù)和新產(chǎn)品來解決性能問題。技術(shù)架構(gòu)的重構(gòu)的一個有效途徑是引入大數(shù)據(jù)產(chǎn)品,需重點(diǎn)考慮現(xiàn)有數(shù)據(jù)架構(gòu)與大數(shù)據(jù)產(chǎn)品的融合和互補(bǔ),形成有效應(yīng)用模式,這通常需要投入大量人力物力,對現(xiàn)網(wǎng)環(huán)境的影響也較大,要達(dá)到成熟應(yīng)用的目標(biāo)通常需要較長周期的過渡。在現(xiàn)有資源和技術(shù)架構(gòu)條件下,既要保證對現(xiàn)網(wǎng)環(huán)境的影響減到最小,又要在短時間內(nèi)解決性能問題,通?,F(xiàn)實可行的思路就是進(jìn)行系統(tǒng)優(yōu)化、深入設(shè)計,保證現(xiàn)網(wǎng)系統(tǒng)正常運(yùn)行。在現(xiàn)網(wǎng)系統(tǒng)正常運(yùn)行的前提下,再根據(jù)問題診斷的結(jié)果預(yù)測數(shù)據(jù)增長可能帶來的后續(xù)問題,以及是否需要進(jìn)行技術(shù)架構(gòu)的重構(gòu)和升級。結(jié)合無線網(wǎng)絡(luò)優(yōu)化平臺線上實際情況,本文主要介紹以下方面的優(yōu)化設(shè)計思路:
從應(yīng)用訪問方式上,有些數(shù)據(jù)需要頻繁進(jìn)行查詢,而有些數(shù)據(jù)需要進(jìn)行頻繁修改。如果數(shù)據(jù)查詢頻繁但是幾乎不進(jìn)行修改,在數(shù)據(jù)庫設(shè)計時可以考慮應(yīng)用訪問的內(nèi)容,考慮進(jìn)行一些物理的不規(guī)范化處理,使得盡量通過簡單的查詢就可以得到結(jié)果;而對于需要頻繁修改的數(shù)據(jù),在進(jìn)行設(shè)計時就需要按著范式的要求進(jìn)行設(shè)計。無線網(wǎng)絡(luò)平臺是一個數(shù)據(jù)倉庫系統(tǒng),多數(shù)的數(shù)據(jù)屬于一次寫入頻繁訪問,所以在物理不規(guī)范化設(shè)計上需要多考慮應(yīng)用系統(tǒng)的需要。
時間作為一個信息維度,是很多日志類的數(shù)據(jù)查詢和統(tǒng)計的關(guān)鍵條件,通過對應(yīng)用請求的統(tǒng)計,約95%的請求訪問近7天的數(shù)據(jù),其中80%的請求訪問近24小時的數(shù)據(jù),因此在數(shù)據(jù)存儲和數(shù)據(jù)模型設(shè)計時可以考慮在物理上將近期數(shù)據(jù)單獨(dú)存放在高性能的存儲設(shè)備上,甚至可根據(jù)實際應(yīng)用將近期實時數(shù)據(jù)存儲在內(nèi)存中,如圖1所示。這樣可以大大提高應(yīng)用訪問的效率和速度,減少查詢和統(tǒng)計對數(shù)據(jù)庫的負(fù)載。
圖1 數(shù)據(jù)的時間價值分級示意圖
有效地使用索引是數(shù)據(jù)庫應(yīng)用系統(tǒng)取得高性能的基礎(chǔ)。同時,索引的建立需要占用額外的存儲空間,并且在增、刪、改操作中也會增加一定的工作量。因此,增加適當(dāng)?shù)乃饕h除不適當(dāng)?shù)乃饕?,將有助于?yōu)化數(shù)據(jù)庫性能。合理的索引設(shè)計是建立在對各種查詢的分析和預(yù)測的基礎(chǔ)上,只有精準(zhǔn)索引設(shè)計,使索引與程序有效地結(jié)合起來,才能產(chǎn)生最佳的索引優(yōu)化方案。
索引能大大加快數(shù)據(jù)庫的查詢速度,快速定位數(shù)據(jù)的物理地址。但是,對于大型表建索引卻不一定能取得預(yù)期的優(yōu)化效果,有時反而會降低數(shù)據(jù)庫的整體性能。由于大型表存儲數(shù)據(jù)量較大,對其建立索引,其索引數(shù)據(jù)會優(yōu)化使用系統(tǒng)的數(shù)據(jù)塊緩存,導(dǎo)致系統(tǒng)不得不頻繁地訪問磁盤來獲取請求數(shù)據(jù),從而導(dǎo)致數(shù)據(jù)庫整體性能下降。在這種情況下,可以考慮根據(jù)應(yīng)用數(shù)據(jù)特點(diǎn)進(jìn)行分區(qū)及建立分區(qū)索引。所以,對大型表有時不建索引反而更好,即使創(chuàng)建索引也應(yīng)盡量保證索引盡可能地符合應(yīng)用訪問的需求以及數(shù)據(jù)的特點(diǎn),在建立索引時不能簡單地認(rèn)為創(chuàng)建索引就可以提高查詢性能。索引必須指定一個適合所需的訪問路徑,這就要求在進(jìn)行索引設(shè)計時應(yīng)避免簡單設(shè)計,一定要結(jié)合應(yīng)用和數(shù)據(jù)的特點(diǎn)進(jìn)行精準(zhǔn)設(shè)計。
分區(qū)技術(shù)提供了一種在物理上將大數(shù)據(jù)庫對象分解為多個小的、易管理的實體的機(jī)制,其使得那些令人畏縮、難以實施的海量數(shù)據(jù)操作變得簡單、易于管理和控制。分區(qū)將大的數(shù)據(jù)表或者索引分割為獨(dú)立管理和并行處理的小對象,使得大型數(shù)據(jù)庫的整體性能得以優(yōu)化。
分區(qū)在物理上將數(shù)據(jù)分開存儲,對一個表建立分區(qū),當(dāng)查詢這個分區(qū)表時,系統(tǒng)根據(jù)查詢條件只需要在對應(yīng)的表分區(qū)中進(jìn)行掃描,避開全表掃描,從而大大縮短掃描的時間。同時,分區(qū)分散在不同的磁盤上,當(dāng)多個分區(qū)并行工作時也就大大減少了I/O的負(fù)載,此時分區(qū)將多個數(shù)據(jù)傳輸請求對磁盤I/O訪問分散開來,如圖2所示。實際應(yīng)用中,數(shù)據(jù)訪問經(jīng)常會涉及到多個維度的組合,此時可以根據(jù)實際業(yè)務(wù)查詢場景來設(shè)計混合分區(qū)模式,對于維度多、查詢條件復(fù)雜、查詢場景多的業(yè)務(wù)表的訪問性能會有顯著的性能提升。網(wǎng)優(yōu)平臺中對于像無線上網(wǎng)記錄這樣的大型表,可以考慮根據(jù)頻繁訪問的時間和網(wǎng)元維度建立混合分區(qū),這樣可以根據(jù)應(yīng)用將數(shù)據(jù)分散到不同的磁盤I/O,快速定位查詢數(shù)據(jù),減少大量數(shù)據(jù)訪問的時間。
圖2 分區(qū)表的多任務(wù)并行執(zhí)行模式圖
數(shù)據(jù)庫并行處理機(jī)制的目標(biāo)是高性能和高可用性,通過多個處理節(jié)點(diǎn)并行執(zhí)行數(shù)據(jù)庫任務(wù),可以提高整個數(shù)據(jù)庫系統(tǒng)的性能和可用性。
數(shù)據(jù)庫并行處理機(jī)制高性能可以從2個方面理解:速度提升、范圍提升。速度提升是指通過并行處理,可以用更少的時間完成成倍的任務(wù);范圍提升是指通過并行處理,在相同時間內(nèi)可以完成更多任務(wù)。CPU的快速發(fā)展使得利用多CPU的并行技術(shù)來提升性能成為可能,對于多CPU系統(tǒng)盡量采用并行查詢方式進(jìn)行數(shù)據(jù)庫操作,此時系統(tǒng)可以將查詢請求分配給多個CPU間并行處理,每個獨(dú)立的進(jìn)程同時進(jìn)行請求的處理,大大提高了應(yīng)用訪問的速度。對于大型的數(shù)據(jù)倉庫系統(tǒng),一般都會定期進(jìn)行大量的數(shù)據(jù)加載工作,此時采用并行加載機(jī)制加載數(shù)據(jù),也可以大大提高數(shù)據(jù)裝載的速度,減少數(shù)據(jù)裝載對數(shù)據(jù)庫影響的時間。
由于應(yīng)用程序SQL語句早于數(shù)據(jù)量的增長,所以對于很多SQL可能并沒有考慮大數(shù)據(jù)量情況下對系統(tǒng)資源和消耗,SQL優(yōu)化對無線網(wǎng)絡(luò)優(yōu)化平臺來說是提升性能的一個有效途徑。SQL語句優(yōu)化時必須要考慮:一是根據(jù)數(shù)據(jù)庫系統(tǒng)的技術(shù)特點(diǎn)進(jìn)行優(yōu)化的技巧;二是根據(jù)應(yīng)用需求進(jìn)行的針對性設(shè)計。特別是對于大數(shù)據(jù)量的數(shù)據(jù)庫系統(tǒng),在設(shè)計SQL時一定要關(guān)注查詢的數(shù)據(jù)量大小,避免需求理解偏差以及返回的大記錄集等情況,從而避免功能設(shè)計引起對大數(shù)據(jù)量訪問的性能下降。在很多情況下,用戶真的不需要大量數(shù)據(jù)的返回,通過功能設(shè)計完全可以避免或緩解。SQL優(yōu)化和設(shè)計技巧有很多,針對類似無線網(wǎng)絡(luò)優(yōu)化平臺的大數(shù)據(jù)量查詢問題提出幾個關(guān)鍵設(shè)計技巧如下:
(1)限制動態(tài)SQL的使用。動態(tài)SQL也會重新進(jìn)行語法分析,重新占用資源,不考慮SQL共享池中是否有一個完全相同的查詢值。
(2)避免不帶任何條件的SQL語句。不帶任何條件的SQL語句通常需要進(jìn)行全表掃描,對于大型表將耗費(fèi)相當(dāng)多的資源和相當(dāng)長的時間。
(3)盡量設(shè)計相同的或類似的SQL語句,以充分利用SQL共享池資源,查詢數(shù)據(jù)在SGA中命中的幾率也會大大提升。
(4)如果查詢確實需要返回大量數(shù)據(jù)時,可以考慮先返回少量結(jié)果,等待用戶發(fā)出新的指令,再查詢返回全部結(jié)果集。
數(shù)據(jù)庫面臨的性能瓶頸大多數(shù)是因為新業(yè)務(wù)的增加導(dǎo)致資源耗盡,因此要解決數(shù)據(jù)庫的性能瓶頸,就需要對數(shù)據(jù)庫系統(tǒng)業(yè)務(wù)進(jìn)行深入了解,明確業(yè)務(wù)需求和數(shù)據(jù)增長趨勢,再采取針對性的應(yīng)對措施。數(shù)據(jù)庫性能問題沒有一個統(tǒng)一標(biāo)準(zhǔn)的解決方案,通??梢詮募夹g(shù)架構(gòu)重組和優(yōu)化設(shè)計這2個思路出發(fā),結(jié)合具體的業(yè)務(wù)需求和技術(shù)實現(xiàn)來統(tǒng)籌考慮,從而制定解決方案。本文主要從優(yōu)化設(shè)計的角度探討了無線網(wǎng)絡(luò)優(yōu)化平臺數(shù)據(jù)庫面臨數(shù)據(jù)增長帶來的性能問題,分析了數(shù)據(jù)增長帶來性能下降和性能瓶頸及其影響,并從技術(shù)層面提出了應(yīng)對性能瓶頸的優(yōu)化設(shè)計思路,這些優(yōu)化設(shè)計思路在上海電信無線網(wǎng)絡(luò)優(yōu)化平臺現(xiàn)網(wǎng)實測效果明顯,較好地解決了當(dāng)前數(shù)據(jù)增長帶來的性能下降問題。
[1] 張永,張紅蕊,路婧威. 海量數(shù)據(jù)離散化算法的并行設(shè)計與實現(xiàn)[J]. 計算機(jī)應(yīng)用與軟件, 2014,31(6): 21-23.
[2] 范慶彬,王為. 云計算在電信運(yùn)營商中的應(yīng)用[J]. 信息通信, 2011(3): 167-170.
[3] 陳宏偉,陳喜龍. 數(shù)據(jù)庫的查詢優(yōu)化技術(shù)[J]. 科技資訊, 2008,15(5): 1-5.
[4] 王凱. MapReduce集群多用戶作業(yè)調(diào)度方法的研究與實現(xiàn)[D]. 長沙: 國防科技大學(xué), 2010.
[5] 郭忠南,孟凡榮. 關(guān)系數(shù)據(jù)庫性能優(yōu)化研究[J]. 計算機(jī)工程與設(shè)計, 2006,27(23): 84-90.
[6] 張義德,王國慶,湯幼寧. 更改的判定條件覆蓋測試技術(shù)研究[J]. 計算機(jī)工程與設(shè)計, 2003,24(5): 19-22.
[7] 陳鑫,楊平. 應(yīng)用MC/DC準(zhǔn)則時需考慮的問題及其改進(jìn)方法[J]. 計算機(jī)工程與設(shè)計, 2004,25(3): 406-409.
[8] 蔣承延,吳思遠(yuǎn). 大型ORACLE數(shù)據(jù)庫優(yōu)化設(shè)計方案[J]. 電腦知識與技術(shù)(學(xué)術(shù)交流), 2007(12): 1518-1519.
[9] 黃錫滋. 軟件可靠性、安全性與質(zhì)量保證[M]. 北京: 電子工業(yè)出版社, 2002.★