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