摘 要:數據庫已經成為人們進行數據存儲、數據共享和數據處理以及信息管理的重要工具。數據庫性能調整和優化成為數據庫應用的一個重要課題。本文通過對Oracle數據庫中緩存的執行原理和過程進行研究,總結出緩存性能調整和優化的規則。
關鍵詞:Oracle數據庫;數據庫性能;優化;庫緩存
中圖分類號:TP311.13 文獻標識碼:A 文章編號:1674-7712 (2013) 14-0000-01
一、引言
數據庫已經成為人們進行數據存儲、數據共享和數據處理以及信息管理的重要工具。數據庫性能調整和優化成為數據庫應用的一個重要課題。Oracle數據庫利用SGA的主內存來管理用戶間的數據共享,數據通過一組后臺進程在SGA與數據文件之間進行數據讀寫。SGA是一塊共享的,用于加載數據、對象并保存運行狀態和數據庫控制信息的一塊內存區域,在數據庫實例啟動時分配,當實例關閉時釋放,每個實力都擁有自己的SGA去,是數據庫系統的核心。建立SGA的目的是為了將數據放在內存以便快速存取,其使用效率會大大影響數據庫系統的性能。其中共享池和緩沖區高速緩存是SGA兩個重要的優化區域。
二、Oracle緩存優化架構
(一)操作系統內存的調整。由于內存性能較磁盤性能更高,更多地通過內存訪問數據能縮短用戶響應時間。但數據庫應用系統的訪問量增大,對內存資源的使用存在競爭。為了充分利用系統內存,需要在Oracle緩沖區內存和系統需要的內存之間求得平衡。(1)減少分頁和交換。操作系統可以在實際內存、虛擬內存、擴展存儲和磁盤中保存信息。操作系統將信息從一個存儲頁移動到另一個,該過程稱為分頁和交換。內存交換可造成很大的內存開銷,應將它最小化。用操作系統程序監控操作系統行為,若系統存在內存交換且需要節約內存,可減少數據庫緩沖區的數量,以釋放一些內存。少量的內存分頁不會顯著地影響系統的性能,若系統有過多的分頁活動,需要考慮安裝更多的內存,配置系統核心使用更少的內存。(2)SGA放入主存中。通過設置初始化參數PRE_PAGE_SGA為YES,在啟動實例時Oracle將整個SGA放入主存中,為SGA的每頁預建立操作系統頁表條目。該設置可能增加實例啟動所需時間,在啟動后運行過程可以減少Oracle達到它全部性能所需的時間。
(二)共享池性能優化。共享池的功能在于共享,保存數據字典高速緩存和PL/SQL塊和SQL語句的完全分析或編譯表現。共享池太小,服務器需將資源用于管理可用的有限空間,將消耗CPU資源和引起競爭。最大限度的提高高速緩存區命中率與降低高速緩存區遺漏率是所有共享池調整的目標。較高的高速緩存區命中率表明應用程序用戶經常查找發布且已在內存中的SQL和PL/SQL語句。如下SQL語句針對LibraryCache和DataDictionaryCache計算命中率。select(sum(pins-reloads))/sum(pins)fromv$librarycache;select(sum(gets-getmisses-usage-fixed))/sum(gets)fromv$rowcache;Oracle建議,在試圖調整DataDictionaryCache之前,先調整LibraryCache并使它的命中率最大化,LibraryCache的一個不太優化的高速緩存區命中率比DataDictionaryCache的一個不太優化的高速緩存去命中率對性能的影響更大。
(三)數據緩沖區高速緩存性能優化。在保證用戶能查找到它們的SQL和PL/SQL語句的緩存版本的同時,還能在緩存中查找所請求的數據,系統的性能將得到更大的提升。BufferCache是SGA的一個組件,用于緩存應用程序用戶最近在數據中訪問過的數據塊副本,當用戶下一次請求操作同樣的數據塊時,則不需要從磁盤獲得,大大提高了系統的響應速度。在每個實例的BufferCache中通過LRU列表與Dirty列表進行管理,其中各個列表上存放的是指向具體的Buffer的指針等信息。(1)增大BufferCache。使BufferCache變的越大,緩存數據的緩沖區也越大,得到的緩存數據就不可能被LRU列表從BufferCache中刪除掉。BufferCache的命中率也越高。計算緩沖區的命中率:CacheHitRatio=1-(PHYSICALREADS)/(DBBLOCKGETS+CONSISTENTGETS)數據庫緩沖區命中率低于70%或80%時,可增加數據庫緩沖區以提高系統性能。調整Oracle初始化參數DB_CACHE_SIZE可以增加數據庫緩沖區的內存空間。(2)合理使用多個緩沖池。Oracle提供了將BufferCache分解成3個獨立區域的能力,分別為Default、Keep、Recycle池,提高BufferCache的命中率。避免所有數據庫段都爭用DefaultPool中的相同BufferCache緩沖區。Keep池的目的是在緩沖區中將信息保存更長的時間,其方法是保留緩沖池提供了一個緩沖區,只有被指定給保留緩沖池的對象才能刪除保存在這個區域中的其他對象。我們可以將保留緩沖池用于那些需要較快響應時間且不會被經常訪問的表和索引,這樣可提高用戶訪問這些對象時的性能。可在建表時就指定將其放在Keep池中。Recycle池的目的是從緩沖池中移出對象,其實現方法是通過提供一個緩沖區域,在這個區域中對象的保存時間將很快到期。對于經常一次性讀取時用的數據,可以將其存放在Recycle池中。Keep池中數據傾向于一直保存,Recycle池中的數據傾向于即時老化。為了檢索某個特定的數據,對于一些大規模的表掃描非常普遍,正確地設置Recycle池,使這些表在緩沖池的保存時間很快到期,從而不會造成將一些很重要的數據從主緩沖池中刪除掉。Default池的目的是實現保留緩沖池和循環緩沖池之外的其他功能。未指定存儲池的數據會放到Default池中。其分配到的內存空間為DB_CACHE_SIZE-DB_KEEP_CACHE-DB_RECYCLE_CACHE_SIZE。數據庫已經成為人們進行數據存儲、數據共享和數據處理以及信息管理的重要工具。
三、結論
數據庫的性能達到最大化,應該從操作系統,數據庫結構,Oracle資源配置,SQL語句等方面對其進行性能調整與優化。在實際應用系統中,操作系統的性能、服務器硬件的性能、數據庫的設計,內存配置,應用程序設計等都影響數據庫運行的整體性能,是一個高度可優化的軟件產品。本文僅從緩存角度出發分析了操作系統內存調整對Oracle內存的影響;共享池性能調整優化方法、數據緩沖區高速緩存性能調整優化方法,需要在以后的實踐中不斷應用研究和發展。
參考文獻:
[1]鄭煜.結構化數據異構同步技術的研究[D].北京林業大學,2013.
[2]鄧世權.基于Memcached的告訴緩存功能擴展研究[D].西南交通大學,2012.
[3]吳潔明,周錦.基于Oracle數據庫SQL查詢語句優化規則的研究[J].陜西理工學院學報,2013,8.
[4]王術海.基于Oracle的電信企業數據庫平臺性能調優研究[D].吉林大學,2012.
[作者簡介]朱衛平(1979-),女,成都航空職業技術學院,講師,主要從事數據分析工作。