劉宏志
(中國東方電氣集團有限公司,四川 成都 611731)
SAP架構下Oracle數據庫的性能優化研究
劉宏志
(中國東方電氣集團有限公司,四川 成都 611731)
隨著信息技術的不斷發展,SAP系統被越來越多的企業運用。Oracle作為SAP系統使用最廣泛的數據庫系統,其性能對SAP系統有著重要影響。文章主要對SAP架構下Oracle數據庫的主要性能進行了研究,并提出了調整和優化的措施。
SAP架構;Oracle數據庫;系統性能;優化
SAP R/3系統是一種典型的3層架構的系統,除了應用服務器和展現層外,數據庫對其性能有著重要影響。Oracle作為業界最主流的數據庫系統之一,在SAP R/3系統中應用廣泛。但我國的數據庫規模呈逐年上升趨勢,并且連接數量也有增無減,導致Oracle數據庫的功能不能很好地發揮以往性能。為使Oracle數據庫能夠繼續發揮作用,需要對系統進行優化升級,主要從服務器以及應用程序和網絡3方面入手,對服務器進行調整,使之在有限的硬件資源條件下,達到性能最優[1]。
服務器對Oracle數據庫性能有著直接影響。服務器設置不合理將會直接降低Oracle的運行效率,也就是說服務器是整個系統的基礎,如果基礎沒有打好,整個數據庫就不能真正發揮作用,那么系統再怎樣優化也無濟于事。
首先,要知道Oracle數據庫按照什么樣的原則為指導,對服務器資源進行科學合理的分配:盡量使Oracle可使用的資源最大化。如果有條件,盡量不使Oracle數據庫和SAP系統同時使用同一個服務器,盡可能使Oracle占有本服務器最多的資源。
其次,對服務器里的內存加以優化,對其進行調整,盡量減少虛擬內存的使用。當物理內存不能滿足Oracle的要求時,操作系統會調用虛擬內存對物理內存中的信息進行頁面替換,這將引起大量的磁盤I/O操作,使整個服務器的性能下降。只有使服務器中的內存增大了,才能減少虛擬內存對物力內存的占用。
第三,對Oracle進程進行參數調整,使優先級統一為相同參數。因為在Oracle數據庫系統中,所有的后臺和前臺數據庫服務器進程執行的都是同等重要的工作,需要同等的優先級。
內存參數的調整主要是指Oracle數據庫的系統全局區(System Global Area,SGA)的調整。作為Oracle數據庫的核心部分,SGA是對數據庫數據進行快速訪問的一個系統區域,可以被服務器和用戶共享[2]。共享池以及數據和日志緩沖區域組成了SGA。SGA在日常運行中須不停地對數據進行釋放和配置,只有把SGA設置在服務器的物力內存之中,才能盡可能快地對數據進行訪問使用。內存的調整主要是指調整組成SGA的內存區域的大小來提高系統性能,具體由SGA_MAX_SIZE,DB_CASHE_SIZE,PGA_ AGGREGATF_TARGET,SHARRED_POOL_SIZE 4個參數控制。在對SGA進行物理內存設置時,只要按照一般原則設置即可:通常SGA占據物理內存的50%~70%左右。服務器物理內存越大,給SGA的比例也可以越高一些。共享池主要存儲如SQL,PL/SQL存儲過程及包、數據字典等,對于SAP系統較為固定,設置時不需超過20 G,富余的內存可以分配給數據緩沖區。
數據庫的數據最終要存儲在物理磁盤上。磁盤I/O操作是數據庫性能最重要的方面,它是系統消耗最大的Oracle數據庫操作。為了避免與I/O相關的性能瓶頸,監控磁盤I/O并對其進行調整非常重要。影響磁盤I/O的性能的主要原因有磁盤競爭、I/O次數過多和數據塊空間的分配管理[3]。磁盤I/O的調優主要包括文件獨立放置、使用磁盤陣列、使用分區、應用裸設備4個方法[4]。除了裸設備外,前3個方法的核心思想都是將數據文件放置在不同的物理磁盤上,從而利用并行訪問提升磁盤讀寫的速度,減少不同進程對磁盤競爭的幾率。而裸設備指的是未經格式化的磁盤分區,Oracle可以對其進行讀和寫操作,而沒有緩沖開銷。裸設備可以用于寫操作頻繁、順序訪問的數據和回滾日志文件,但不能用在備份程序中。
通常Oracle在回滾段將數據修改前的值保存在內。回滾段包括3個作用:其一是事務回滾作用:數據庫可以從回滾段找回數據改變前的數據記錄,也就是說回滾段具有原始數據讀取功能;事務恢復作用:如果對數據的后期操作失敗,那么可以在下次打開Oracle時將未提交的原始數據利用回滾段中的重做日志文件對其進行恢復;讀一致性功能:如果回話未對修改過的數據提交保存,那么其他會話不會進行改變,但是其他會話如果修改了查詢所需的數據資源,那么這個會話在進行查詢操作時數據就會改變,Oracle將利用回滾段的數據前影像來構造一個讀一致性視圖。由此可見回滾段在數據庫中起著關鍵性的作用,如果設計得不合理,不管多好的剩余部件設計,都會使SAP系統不能發揮其應有的功能、作用。因此,在開展回滾段的優化調整時應遵循以下原則。
(1)回滾段獨立放置。為了發揮回滾段應有的性能,應將回滾段同其他諸如索引、數據字典等的數據分開放置,此時應為回滾段創建一個或一個以上的獨立表空間。
(2)構建回滾段群。為了使回滾段在面對不同類型數據時能夠快速作出反應,應該構建較小、較大、特大3種大小不同的回滾段群,須注意的是不要將這3種回滾段群放置在同一個表空間上,應分開放置。并且每個群的內部大小相同,以滿足該組事務處理的最大要求。
(3)回滾段的建立數量應科學合理。并不是回滾段的數量越多越好,而應該參照SAP的并發事務數量建立,SAP的并發事務少于16個,則設置4個回滾段;當并發事務多余16個少于32個時,設置8個回滾段;并發事務多余32個時,則設置并發事務數量/4的回滾段。
ABAP開發語言是SAP公司為SAP軟件專門開發的一種編程語言,是為從事二次開發推出的一種面向對象的語言[5]。ABAP采用Open SQL來訪問和操作數據庫。優化ABAP中的SQL語句,可以有效降低數據庫的負載,提升數據庫的系能。ABAP的SQL語句的優化原則是盡量減少數據庫中的IO操作,有以下4個要求。
避免使用SELECT … ENDSELECT語句。SELECT ENDSELECT語句其實是一個循環體,因此如果使用TABLE賦值,將會大大降低循環體的使用,提高性能。
盡可能減少SELECT *的使用頻率,盡量使用需要讀取的字段來做檢索。
使用FOR ALL ENTRIES IN語句用來把內表以及數據表相連,能夠大大減少數據的提取頻率,優化數據。
如果Where子句中含有選擇性條件,如Where N=20,則將最具有選擇性部分放在表達式最后。
為使用戶能夠快速便捷地使用應用程序,在設計系統時可以利用視圖對數據進行隱藏、刪減,同時能夠將涉及多個表的復雜查詢以視圖的方式給出。這樣能夠通過索引快速查找數據,同時還可減少磁盤I/O,優化對數據表的查詢,加速SQL語句的執行。除此之外,構建索引提高系統性能,應從以下方面入手:該表常用來在索引列上查詢,該表不常更新、插入、刪除等操作,查詢出來的結果記錄數應控制在原表的2%~4%。
綜上所述,隨著SAP系統的應用深入,對Oracle數據庫的性能提出了越來越高的要求。對Oracle數據庫性能進行調優,根本目的在于提升SAP系統的效率和功能。但影響Oracle數據庫性能的因素非常多,優化與調整是需要不斷摸索和總結的過程。必須對影響Oracle性能的因素進行分析,針對每一個因素都作出科學合理的調整和優化,才能夠保證最終Oracle數據庫應用系統性能達到SAP系統的要求。
[1]鄒俊. 基于Oracle數據庫系統性能調整與優化研究[D].南昌:江西財經大學,2006.
[2]魏亞楠,宋義秋. Oracle數據庫應用系統的性能優化[J].制造業自動化,2010(8):204-206.
[3]劉哲. 基于Oracle數據庫系統的優化與性能調整研究[J].綠色科技,2012(5):283-284.
[4]王雷,曾蘊波,王璐. Oracle數據庫的性能調整與優化方法探析[J].航天器工程,2008(6):129-133.
[5]孫勤.淺談SAP中ABAP程序的優化方法[J].電腦知識與技術,2012(19):4757-4758.
Research on performance optimization of Oracle database under SAP architecture
Liu Hongzhi
(China Dongfang Electric Corporation, Chengdu 611731, China)
With the continuous development of information technology, SAP system has been used by more and more enterprises. As the most widely used database system of SAP system, Oracle’s performance has an important influence on the SAP system. The main performance of the Oracle database under the SAP architecture is studied, and the adjustment and optimization measures are put forward in this paper.
SAP architecture; Oracle database; system performance; optimization
劉宏志(1984— ),男,四川德陽,碩士,工程師;研究方向:數據挖掘,模式識別。