武文斌
摘要:Oracle數據庫是以高級結構化查詢語言(SQL)為基礎的大型關系數據庫,能夠對系統提供穩健的支持。隨著Oracle數據庫應用的不斷深入,Oracle數據庫維護和性能優化至關重要。本文從Oracle數據庫性能優化的視角出發,結合研究現狀,從一個全新的角度對Oracle數據庫性能優化與實時監控技術進行研究,并提出針對性的建議。
關鍵詞:Oracle數據庫;性能優化;監控系統
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2019)07-0003-02
從當前IT系統的現狀來看,大型應用系統多基于大型關系型數據庫,但關系型數據庫會隨著聯機用戶的持續增加而對應用系統性能造成制約,并且基于關系型數據庫的大型應用系統性能的提升是硬件系統擴容,但通常費用較為昂貴。在這種背景下,Oracle數據庫以其使用方便、可移植性好、功能強大的優點,能夠對當前大用戶背景下的應用系統提供穩健的支持,因此Oracle數據庫的性能優化和監控分析具有重大的現實意義。
1 Oracle數據庫概述
Oracle數據庫是以高級結構化查詢語言為基礎的大型關系數據庫,在系統應用中,隨著數據量的不斷增大,Oracle數據庫需要加以優化調整才能發揮應有功效。對Oracle數據庫性能進行優化調整就需要先了解其體系結構,即物理結構、進程結構、內存結構、邏輯結構。物理結構是指組成數據庫的操作系統物理文件,包括控制文件、參數文件、數據文件、歸檔日志文件和重做日志文件;進程結構包括后臺進程、用戶進程和服務器進程;內存結構包括Java池、程序全局區、排序區、系統全局區、大池;邏輯結構包括數據塊、區、段、表空間、模式對象。
對Oracle數據庫性能進行優化調整通常是在兩個階段,即設計階段和數據庫運行階段,設計階段的優化調整集中于物理結構和邏輯結構,數據庫運行階段優化調整集中于應用程序、網絡性能、數據庫環境以及操作系統。操作系統的優化調整方法一般包括控制分頁、減少內存交換、使SGA留駐內存。對Oracle數據庫性能優化調整時需要先明確哪些因素有較大的影響,因此需對Oracle數據庫監控對象進行分析,包括CPU、I/O、內存、會話、回退段、Oracle模式對象。
2 Oracle數據庫性能優化
(1)內存優化
在Oracle數據庫性能優化的內存優化調整一般是調整系統全局區(SGA)。
①共享池調整:執行select namespace, gethitratio from v$librarycache,gethitratio若在95%以下則需注意調整;重裝率大于1%需調整共享池大小;字典高速緩存命中率結果小于85%則需增加共享池的大小。
②重做日志緩沖區調整:查詢重做日志緩沖區的效率,如果其值不斷增大,則需增加log_buffer的大小。
③緩沖區高速緩存調整:Oracle數據庫運行時,為縮短響應時間,提高相應效率,應盡可能從緩沖區高速緩存中尋找數據,這需監控緩沖區高速緩存的命中率,如果命中率低于90%,則需增加db_cache_size的值。
(2)I/O優化
為提升Oracle數據庫性能,應盡量減少磁盤I/O,并使用本地管理表空間,進而平衡I/O,平衡多個磁盤驅動器的負荷。具體優化策略包括:①同一表空間多個數據文件存放于不同磁盤;②訪問量大的數據文件應在獨立磁盤上進行存放;③用戶數據一般不放在system表空間,而是單獨創建表空間;④創建臨時表空間用于排序操作,創建單獨的回滾段表空間,是數據庫碎片不散落在多個表空間;⑤創建單獨的索引表空間,其區分磁盤存放索引數據與表數據;⑥為減少磁盤競爭,重做日志文件單獨存放,盡量不要與數據文件存于統一磁盤,且重做日志文件要足夠大。
(3)CPU優化
應用系統與應用軟件性能不僅受I/O影響,還受CPU約束。工作高峰時CUP使用率要求在90%以下,如空閑時CPU使用率依然很高,則需調整優化CPU,增加CPU資源。通過查看v$sysstat數據字典中的用戶態CPU時間和操作態CPU時間,查看當前連接Oracle數據庫各個會話占用CPU時間,若操作系統占用CPU時間在90%以上則說明正常,否則說明服務器CPU被其他程序占用過多,造成CPU資源不足。這是需要分析SQL語句,對低效率的SQL語句和鎖沖突進行調整優化,或增加Oracle參數高速緩存的光標數的值。
(4)網絡性能優化
網絡性能是影響Oracle數據庫性能的又一重要因素,優化調整的策略則主要是減少網上數據流量。Oracle中的網絡協議是Net 8或SQL*Net,其為客戶端和Oracle服務器提供透明連通性。為減少網絡信息流量,確保網絡吞吐量的快速性,需測出網絡增加的延遲。Oracle數據庫系統提供了v$session_wait、v$session_event和v$sesstat三個動態性能表。
在v$session_event中用信息間等待時間評估網絡效率,在v$session_wait中用等待事件與Oracle做出的回應評估網絡效率,在v$sesstat中查看接收和發送到客戶端的字節數,以及客戶端做出的請求數目,來評估網絡效率。
3 Oracle數據庫監控系統設計實現
(1)需求分析與總體框架
隨著網絡的快速發展,客戶訪問數量越來越大,對系統性能要求越來越高,因此Oracle數據庫實時監控系統對Oracle數據庫系統而言十分必要,是調整優化Oracle數據庫性能的重要子系統。由于訪問客戶數量的增大,在原有硬件系統的基礎上,系統負荷量越來越大,進而影響Oracle數據庫系統性能,通過Oracle數據庫實時監控系統對數據庫性能進行實時監控,能夠為其調整優化提供支持。
Oracle數據庫監控系統基于J2EE分布式構件技術實現,采用B/S三層架構,保證系統擴展性和跨平臺性。監控系統的設計要遵循“開-閉”原則,關鍵是抽象化,實現對擴展開放。Oracle數據庫實時監控系統應用Struts開發框架,分為客戶端、業務邏輯層、數據庫服務器層三部分。客戶端用戶界面提供可視化接口,支持IE和Applet等。業務邏輯層將數據訪問和業務流程控制分開,前端是遠程方法調用服務器、Servlet/JSP等應用,后臺是數據采樣過程。數據庫服務器層負責數據庫管理,并相應應用服務器的數據請求。
(2)模塊設計
Oracle數據庫實時監控系統功能模塊設計主要涉及模塊獨立和信息隱藏兩方面,實現參數配置、報警模塊、數據訪問、數據采集功能。數據采集主要包括以下五個部分:
數據庫預覽:實現對后臺數據庫性能指標的概覽,比如CPU和內存使用情況、進程以及磁盤存儲、SGA等信息;
性能參數指標監控:監控主要性能指標包括排序區情況、重做日志活動、字典高速緩存命中率、緩沖區命中率、回滾段、庫高速緩存命中率等。性能指標監控處理流程為“監控獲取性能參數值→與標準值比較→判斷是否超過閾值→報警并給出優化建議→存儲參數值”;
存儲指標監控:目標對象為Oracle數據庫存儲動態,因此監控性能指標包括SGA分配、數據文件、表空間等常用項目;
數據庫問題管理:DBA實現對Oracle數據庫常規問題的檢查,包括有問題的SQL、文件I/O、等待事件和鎖表信息;
對象管理:包括SGA、索引、數據庫表、同義詞、序列、視圖等。
(3)數據庫設計
為減輕Oracle數據庫中監控系統對整個系統的影響,監控系統的數據庫單獨存放系統數據和歷史性能數據,要求具備快速讀取、安全存放能力。監控系統數據設計需遵循標準和規范化原則,考慮如下內容:數據結構要符合規范,是業務處理邏輯更清晰;對數據操作應盡量簡化,避免過多的表連續等關聯操作;對相關聯的表添加約束條件,簡化程序對數值處理的流程。
以監控對象為中心,設計一個目標實體作為各種待監控目標的主表,核心對象的表主要包括Target目錄表、數據庫目標表、主機目標表、監控項目表、報警閾值表、實時整數監控數據表、歷史整數監控數據表、系統用戶表、系統資源配置表等。
在數據庫配置中,所有表及相關索引在服務器端程序初始化配置時創建,通過編輯sysDB.config文件中的數據庫配置參數,即可在調用initSysDB.sh腳本時通過讀取sysDB.config文件中參數自動在系統數據庫中創建系統數據庫中相關對象。sysDB.config文件中主要參數賦值可根據實際系統數據庫創建情況進行修改。在配置系統數據庫用戶時先創建用戶,并賦予其connect,resource權限。在Oracle監控系統數據庫中創建添加、刪除和查詢PLSQL存儲過程,充分發揮數據庫對數據的處理能力。
(4)監控系統功能實現
從Oracle數據庫監控系統運行的流程設計可知,監控功能的實現需要目標端程序和服務器端程序共同協作才能完成。程序使用DBTarget對象定義了被監控的目標數據庫,ServerTarget對象定義了被監控的目標主機。在ServerTarget類和DBTarget類中均通過Monit()方法完成對目標端操作哦系統層監控參數和數據庫實例的監控數據收集。
目標端操作系統狀態監控程序流程為:收集Oracle數據庫系統運行數據→與服務器程序建立通信→數據傳輸→是否更新監控參數→更新收集參數→是否停止監控→結束。
目標Oracle數據庫狀態監控流程:連接Oracle數據庫→訪問目標Oracle數據庫→收集目標Oracle數據庫運行數據→與服務器建立通信→數據傳輸→是否更新監控參數→更新收集參數→是否停止監控→結束。
在完成監控系統功能流程后,確定數據庫信息獲取的實現方式,包括成員函數,然后實現表空間監控,最后設計系統人機交互界面,最終完成監控系統。
參考文獻:
[1] 劉夢甜.Oracle數據庫性能監控與分析系統設計[J].信息技術與信息化,2017(4).
[2] 黃杰生.基于ORACLE的數據庫性能優化設計[J].電子技術與軟件工程,2018(10).
[3] 楊瑩.基于Oracle數據庫大數據的檢索優化分析與設計[J].數碼世界,2017(4).
[4] 余欽泉.ORACLE數據庫的運行狀況管理系統的設計與實現[D].廈門大學,2016.
【通聯編輯:唐一東】