于彥國
摘 要 數據庫性能的高低,對于企業管理水平和工作效率的提升都具有非常重要的作用。本文在分析數據庫系統主要的性能評價指標基礎上,提出了Oracle數據庫應用系統的主要優化措施,從而為提升數據庫性能提供一定的參考。
【關鍵詞】Oracle數據庫 性能優化 內存分配
1 引言
隨著信息化技術的不斷發展,越來越多的企業開始管理創新,廣泛的應用信息化管理系統,從而提升企業的現代化管理水平。而信息化管理系統基本上都是建立在數據庫系統的基礎上的各種功能的實現,因此數據庫系統性能的高低,就會直接影響應用系統的性能。而且一般來說當大型數據庫在運行一段時間之后,由于存在著大量的數據,在運算速度上就會不同程度的受到影響,而計算機操作系統、內存、應用程序算法以及數據庫服務器等諸多元素都會對數據庫系統的性能構成重要的影響。
2 數據庫系統主要性能的評價指標分析
數據庫系統性能評價指標主要有以下幾點:
2.1 系統吞吐量
這個指標指的是單位時間里,數據庫系統所能夠完成SQL語句的執行數量。通過是以每秒事務量(tps)來衡量。系統吞吐量越高,那么系統反應時間和執行速度也會越快。
2.2 用戶響應時間
這主要指的是用戶向數據庫提交SQL執行語句開始,到數據庫執行并向用戶反饋結果集這段時間,也就是應用系統的反應時間,主要是以毫秒來衡量。通常分為CPU執行時間和用戶等待時間兩種。
2.3 數據庫命中率
Oracle數據庫系統中,用戶進程所使用到的數據都會先集中在緩沖區,也就是會集中到系統內存中,這樣能夠提升數據讀取效率,如果內存數據能夠符合用戶的需要,那么命中率就會越高,那么系統執行效率就會越高。第四,內存使用情況。這主要體現在共享內存和運行內存以及永久內存三個存儲空間的科學分配上,內存利用效率越高,系統性能就會越高。第五,磁盤I/O速度。因為大量的數據都會存儲在硬盤上,因此從硬盤數據轉移到內存單位時間I/O規模越大,那么速度就會越快,就能夠有效縮短用戶響應時間,從而提升數據庫系統性能。
3 Oracle數據庫應用系統的優化技術分析
3.1 SQL語句的優化
SQL語句是操作數據庫的腳本語言,如果SQL語句能夠在優化器的作用下,能夠充分利用數據庫的索引表,那么就能夠有效減少數據庫掃描索引表的I/O次數,就能夠提升數據執行效率。而優化SQL語句的主要步驟有以下幾點:
(1)查找存有問題的SQL語句,對這些語句進行提前優化,發現問題就能夠有效降低錯誤的讀取數據庫的頻度,查找問題SQL語句的主要方法主要是通過搜集統計數據功能,在Oracle數據庫管理系統中含有DBMSSTATS包以及ANALYZE解析命令,其中DBMSSTATS包主要是搜集有關鏈接數據行的相關統計數據,語法結構為:exec DBMS_SATS.gather_table_stats(owname,tablename,partnmae)。而ANALYZE解析命令則是分析數據簇的相關情況。其主要的語法結構為ANALYEZE CLUSTER Cluste_name Computer STATISTICS。然后再使用SQLTrace32對SQL語句進行分析,oracle中的udump管理區就會對SQL語句進行跟蹤,對語法的解析和執行以及CPU時間和語法執行時間和邏輯讀取的次數等參數進行記錄,接著在通過Oracle Enterprise Manager Console圖形工具獲得數據庫相應的性能指標信息,從而為SQL語句優化提供重要的參考。
(2)構建正確的SQL語句,提升查詢效率。在使用SQL語句時要規避索引不能夠和用戶表空間建立在同一個磁盤上,這樣會造成大量的資源浪費現象。另外WHERE的子句的查詢順序也要進行優化,注意從上至下的順序進行查詢,同時表之間的連接要出現在其他WHERE標識符之前,這樣就能夠有效減少調用數據庫的數據量,從而提升SQL語句的執行效率。
3.2 Oracle內存優化調整
Oracle數據庫管理系統中,其內存結構相對其他數據庫管理系統而言相對復雜,主要影響的參數包括Shared pool,Database Buffer Cache以及Java Pool等。對于Oracle的內存結構的優化主要可以從下面幾個方面著手:
3.2.1 對Shared pool進行優化
也就是對共享池的大小進行合理優化。共享池主要是緩沖區以及數據字典高速緩沖區的重要存放點,如果數據庫緩沖區設置較小,那么就會影響到數據使用性能。如果緩沖區過大,隨著使用次數的不斷增加,就會造成大量的數據碎片,于是也會逐漸降低系統的性能。通常提升數據庫緩沖區的命中率可以通過下面的執行語句來進行優化:Select(1-sum(reloads/sum(pins))) from v$librarycache。執行這個SQL語句之后,返回的結果如果小于0.95,那么就需要增加這個共享池大小,來提升緩沖區命中率。而優化數據字典緩存則可以通過下面的SQL語句來優化:select sum(1-(getmisses)/(sum(gets)+sum(getmisses))) from v$rowcache。如果這個SQL語句的執行值小于0.85,那也要增大共享池大小來優化內存結構。
3.2.2 對高速緩存進行優化
如果緩沖區中包含的高速緩存空間越大,那么載入到內存中的數據量就會越大,那么I/O存取效率就會越高,對此可以通過下面的語法來進行優化: select name,value from v$sysstat where name in (‘dbblokcgets,consistent gets,Physical reads)。執行這個SQL語句之后,如果返回的值小于0.85,那么就需要增加緩沖區高速緩存的值來提升數據庫的性能。
3.2.3 優化日志緩沖區
如果日志緩沖區分配值太小,那么就沒有充分的空間來防止重做條目,從而延長等待時間。對此可以從下面這個語句來查看日志緩存區是否滿足需求:Select name,value from v$sysstat where name=redo log space requests。如果這個語句執行之后,得到的結果為0,那就不需要進行調整,否則就需要增加日志緩存,通常可以上調5%左右,然后重復執行這個語法,直到最終的返回值接近0。
3.3 針對oracle的表空間進行優化
表空間是Oracle數據庫管理系統的重要創新,合理使用表空間能夠有效提升數據庫的性能。對此可以從下面幾個方面來著手優化:
3.3.1 科學規劃表空間
將數據和索引分到不同的表空間,這樣能夠有效降低I/O競爭。在修改應用上,將重演日志和歸檔日志進行分開,盡可能將90%以上的輸入輸出操作放在系統表空間中,或者在索引表空間和回滾表空間中。
3.3.2 優化表空間的結構
對此首先就要分離系統表空間,徹底規避在系統表空間中存儲大量非系統用戶對象,這樣就會造成數據維護的數據調用重復讀,從而降低數據庫系能。然后就要分離索引段。特別要規避和相關的數據段存儲在同一個表空間中,如果調用同一個數據,就會重復執行輸入輸出操作,同時還容易出現沖突,導致時間等待,從而降低數據庫利用效率。最后要分離臨時表空間,臨時的表空間不應該和其他類型的段放在一起存儲,這對于數據庫性能的影響也非常明顯。
4 結語
總而言之,Oracle數據庫管理系統的功能非常強大,在應用Oracle數據庫時,需要結合相應的硬件環境,同時在軟件性能上采用科學的數據庫布局模式,再加上合理的內存分配,SQL語句的優化以及表空間的優化,就能夠有效提升Oracle數據庫性能,從而提升應用系統的性能。
參考文獻
[1]李可可.淺析Oracle數據庫的性能優化方法[J].硅谷,2011(02).
[2]孫風棟,閆海珍.Oracle 10g數據庫系統性能優化與調整[J].計算機技術與發展,2009(02).
作者單位
杭州市西溪醫院 浙江省杭州市 310023