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