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