謝玉軒
引言:目前,本公司承擔(dān)維護多套應(yīng)用系統(tǒng),由于系統(tǒng)廣泛推廣數(shù)據(jù)量成年度線性增長,業(yè)務(wù)系統(tǒng)性能卻逐年下降。為了解決這個問題,引入內(nèi)存數(shù)據(jù)庫TimeTen優(yōu)化技術(shù)。本文通過應(yīng)用系統(tǒng)數(shù)據(jù)庫現(xiàn)狀調(diào)研分析Oracle數(shù)據(jù)庫性能下降的原因,研究使用了內(nèi)存數(shù)據(jù)庫TimeTen技術(shù),解決了數(shù)據(jù)庫性能下降問題,更大提高了數(shù)據(jù)庫的運行速度,保障了應(yīng)用系統(tǒng)的穩(wěn)定快速運行。
一、前言
目前本公司承擔(dān)維護多套應(yīng)用系統(tǒng),其中使用Oralce數(shù)據(jù)庫有物流數(shù)據(jù)庫、公用數(shù)據(jù)庫RAC集群、專用數(shù)據(jù)庫RAC集群等。以上數(shù)據(jù)庫與各自應(yīng)用中間件目前分別部署在不同服務(wù)器中。隨著應(yīng)用廣泛推廣及用戶深入使用,數(shù)據(jù)量呈年度線性增長,業(yè)務(wù)系統(tǒng)性能逐漸下降,數(shù)據(jù)庫整體應(yīng)用性能下降明顯。
二、內(nèi)存數(shù)據(jù)庫建設(shè)的必要性和條件
(一)建設(shè)必要性分析
由于傳統(tǒng)Oracle數(shù)據(jù)庫目的是處理永久和穩(wěn)定數(shù)據(jù),很難顧及數(shù)據(jù)及其處理的定時限制,不能滿足實時應(yīng)用的要求。所以通過新技術(shù),建立內(nèi)存數(shù)據(jù)庫,可有效解決以上問題,利用內(nèi)存數(shù)據(jù)庫和Oracle數(shù)據(jù)庫實時同步性能,將內(nèi)存數(shù)據(jù)庫與中間件置于同一服務(wù)器中,讓內(nèi)存數(shù)據(jù)庫處理實時性強的業(yè)務(wù)邏輯處理數(shù)據(jù),將此部分處理過程由IO密集型改為CPU密集型,有效提升關(guān)鍵應(yīng)用訪問性能。
(二)建設(shè)條件分析
內(nèi)存數(shù)據(jù)庫需要將數(shù)據(jù)置于內(nèi)存中,為了總體性能,需要將原數(shù)據(jù)庫和內(nèi)存數(shù)據(jù)庫物理分開,避免硬盤讀寫、存儲控制器、內(nèi)存使用等資源競爭。
目前公司代維的應(yīng)用系統(tǒng),均是應(yīng)用和數(shù)據(jù)庫物理分開,這樣可將內(nèi)存數(shù)據(jù)庫與中間件置于同一服務(wù)器中,關(guān)鍵應(yīng)用直接通過訪問內(nèi)存數(shù)據(jù)庫實現(xiàn)性能優(yōu)化提升。
三、內(nèi)存數(shù)據(jù)庫技術(shù)原理
內(nèi)存數(shù)據(jù)庫TimesTen是將數(shù)據(jù)和元數(shù)據(jù)存放在內(nèi)存中,以此來獲得極高的響應(yīng)速度并實現(xiàn)數(shù)據(jù)緩存。它有完善的事務(wù)管理,并針對物理內(nèi)存的優(yōu)化調(diào)度算法和并發(fā)事務(wù)處理。實際應(yīng)用使用時,數(shù)據(jù)存儲在內(nèi)存中,利用存儲在硬盤中的日志和檢查點文件文件,提供一套數(shù)據(jù)完善恢復(fù)機制,保證數(shù)據(jù)可靠性。
(一)內(nèi)存數(shù)據(jù)庫TimesTen和傳統(tǒng)數(shù)據(jù)庫Oracle的比較
1.傳統(tǒng)數(shù)據(jù)庫Oracle的目的是處理永久、穩(wěn)定的數(shù)據(jù)。強調(diào)維護數(shù)據(jù)的完整性、一致性,但很難顧及數(shù)據(jù)及其處理的定時限制,不能滿足實時應(yīng)用的需要;
2.傳統(tǒng)數(shù)據(jù)庫Oracle由于磁盤IO、緩存管理、排隊等待及鎖的延遲等使得事務(wù)實際平均執(zhí)行時間與估算的最壞情況執(zhí)行時間相差很大;內(nèi)存數(shù)據(jù)庫由于沒有磁盤IO和緩存管理,能搞準(zhǔn)確估算事務(wù)響應(yīng)時間;
3.內(nèi)存數(shù)據(jù)庫TimesTen處理的數(shù)據(jù)通常是“短暫”的,即有一定的時效。所以,實際應(yīng)用中內(nèi)存數(shù)據(jù)庫TimesTen主要處理實時性強的業(yè)務(wù)邏輯處理數(shù)據(jù)。而傳統(tǒng)數(shù)據(jù)庫Oracle旨在處理永久、穩(wěn)定的數(shù)據(jù),其性能目標(biāo)是高的系統(tǒng)吞吐量和低的代價;
4.傳統(tǒng)數(shù)據(jù)庫Oracle是IO密集型應(yīng)用,內(nèi)存數(shù)據(jù)庫為CPU密集型應(yīng)用。
(二)內(nèi)存數(shù)據(jù)庫TimesTen快的原因
內(nèi)存數(shù)據(jù)庫并非通過簡單將數(shù)據(jù)置于內(nèi)存中來提升應(yīng)用性能,而是它有獨特的數(shù)據(jù)訪問機制、內(nèi)部調(diào)度算法、數(shù)據(jù)訪問路徑優(yōu)化算法等等。當(dāng)應(yīng)用分別連接傳統(tǒng)數(shù)據(jù)庫Oracle和內(nèi)存數(shù)據(jù)庫TimesTen時,傳統(tǒng)數(shù)據(jù)庫Oracle走的訪問路徑和資源成本遠(yuǎn)遠(yuǎn)多于內(nèi)存數(shù)據(jù)庫TimesTen。相對傳統(tǒng)數(shù)據(jù)庫內(nèi)存數(shù)據(jù)庫TimesTen技術(shù)要快很多,并能提升應(yīng)用性能,減少企業(yè)信息化額外投資。
(三)內(nèi)存數(shù)據(jù)庫TimesTen使用方式
應(yīng)用重新部署時,將內(nèi)存數(shù)據(jù)庫與中間件應(yīng)用置于同一服務(wù)器中,將中間件應(yīng)用數(shù)據(jù)庫連接直接指向內(nèi)存數(shù)據(jù)庫,同時內(nèi)存數(shù)據(jù)庫與傳統(tǒng)數(shù)據(jù)庫建立實時同步復(fù)制連接,將應(yīng)用訪問熱點數(shù)據(jù)(全表或表部分?jǐn)?shù)據(jù))通過初始化置于內(nèi)存數(shù)據(jù)庫中,設(shè)定SWT或AWT(同步或異步)方式。當(dāng)中間件應(yīng)用訪問不存在于內(nèi)存數(shù)據(jù)庫的數(shù)據(jù)時,內(nèi)存數(shù)據(jù)庫直接通過PassThough(透穿)方式,將數(shù)據(jù)訪問重定向到傳統(tǒng)數(shù)據(jù)庫Oracle,該部分過程對用戶來說是透明處理,并不影響應(yīng)用性能。
四、內(nèi)存數(shù)據(jù)庫TimesTen建設(shè)過程
(一)建設(shè)總體思路
利用現(xiàn)有成熟內(nèi)存數(shù)據(jù)庫技術(shù)提升應(yīng)用性能,可減少企業(yè)信息化投資并有效提升應(yīng)用性能,具體思路步驟如下:
1.應(yīng)用調(diào)研,查找用戶熱點數(shù)據(jù)及實時訪問數(shù)據(jù);
2.部署內(nèi)存數(shù)據(jù)庫;
3.初始化內(nèi)存數(shù)據(jù)庫數(shù)據(jù);
4.跟蹤內(nèi)存數(shù)據(jù)庫,調(diào)整算法和參數(shù)。
(二)內(nèi)存數(shù)據(jù)庫建設(shè)實施過程
提升應(yīng)用性能有多種方式,如大規(guī)模修改應(yīng)用代碼、更換服務(wù)器、存儲硬件設(shè)備等,以上方式有明顯特點,投資太大,提升應(yīng)用性能存在不確定性。可利用內(nèi)存數(shù)據(jù)庫這項成熟技術(shù),通過內(nèi)存數(shù)據(jù)庫和傳統(tǒng)數(shù)據(jù)庫無縫數(shù)據(jù)交互,將內(nèi)存數(shù)據(jù)庫和中間件共存一體,將讀寫頻繁關(guān)鍵數(shù)據(jù)直接置于內(nèi)存數(shù)據(jù)庫中,使得中間件直接訪問內(nèi)存數(shù)據(jù),減少CPU資源占用、存儲IO讀寫及網(wǎng)絡(luò)傳輸?shù)?,有效提高?yīng)用整體性能。
建設(shè)思路可通過對每套應(yīng)用逐一調(diào)研,收集并梳理應(yīng)用中間件、數(shù)據(jù)庫、服務(wù)器等架構(gòu)信息,并開展應(yīng)用使用情況調(diào)查,對以上數(shù)據(jù)分析,討論并確定優(yōu)化對象(表),并確定內(nèi)存數(shù)據(jù)庫具體加載數(shù)據(jù)內(nèi)容(全表或表部分?jǐn)?shù)據(jù)),利用內(nèi)存數(shù)據(jù)庫和Oracle數(shù)據(jù)庫之間的復(fù)制關(guān)系保持?jǐn)?shù)據(jù)同步,并將中間件連接數(shù)據(jù)庫指向內(nèi)存數(shù)據(jù)庫,以確保關(guān)鍵應(yīng)用性能提升。將內(nèi)存數(shù)據(jù)庫與中間件應(yīng)用置于同一服務(wù)器內(nèi),通過內(nèi)存數(shù)據(jù)庫和關(guān)系型數(shù)據(jù)庫實時或異步同步方式,將關(guān)鍵應(yīng)用數(shù)據(jù)存放于內(nèi)存數(shù)據(jù)庫中,并根據(jù)應(yīng)用特點,專門制定內(nèi)存數(shù)據(jù)存放時間及數(shù)據(jù)同步等智能算法機制,如此中間件可直接訪問本機內(nèi)存即可響應(yīng)用戶操作需求,減少網(wǎng)絡(luò)延遲和部分存儲資源、服務(wù)器資源爭用,有效提升了性能。
五、效果分析
通過上述方案建設(shè)后,解決了因應(yīng)用設(shè)計、數(shù)據(jù)增長等因素導(dǎo)致中間件與關(guān)系型數(shù)據(jù)庫交互時熱點。創(chuàng)新利用內(nèi)存數(shù)據(jù)庫,提升應(yīng)用訪問性能。
整體實施成功后,預(yù)期達(dá)到如下利益目標(biāo):
應(yīng)用性能提升
將內(nèi)存數(shù)據(jù)庫和中間件應(yīng)用部署在一處,將最需要的數(shù)據(jù)直接放到內(nèi)存里,通過直接訪問內(nèi)存數(shù)據(jù),提高用戶響應(yīng)性能,解決I/O訪問瓶頸;
延長應(yīng)用使用年限
隨著應(yīng)用使用年限增長,部分應(yīng)用需求已無法找到原開發(fā)商修改代碼,性能逐步下降,利用內(nèi)存數(shù)據(jù)庫,優(yōu)化性能,延長應(yīng)用使用年限;
加大投資保護
使用內(nèi)存數(shù)據(jù)庫可節(jié)省硬件投資及系統(tǒng)維護成本,免去硬件擴容和系統(tǒng)開發(fā)商大量程序修改等帶來的重新投資。
(作者單位:吐哈油田公司信息產(chǎn)業(yè)處)