【摘要】oracle數(shù)據(jù)庫是當今大中型信息系統(tǒng)使用最普遍的數(shù)據(jù)庫管理系統(tǒng)之一,基于oracle的系統(tǒng)在使用過程中的優(yōu)化是保證系統(tǒng)高效運行的保證,影響數(shù)據(jù)庫性能的因素是多方面的,本文詳細研究了oracle數(shù)據(jù)庫的優(yōu)化技術(shù)在系統(tǒng)中的應(yīng)用策略與方法。
【關(guān)鍵詞】oracle數(shù)據(jù)庫;優(yōu)化;索引
【中圖分類號】TP392 【文獻標識碼】A 【文章編號】1672-5158(2012)09-0107-01
1、引言
隨著信息技術(shù)與數(shù)據(jù)庫技術(shù)的不斷發(fā)展,越來越多的行業(yè)開發(fā)了自己的數(shù)據(jù)庫應(yīng)用系統(tǒng)。許多系統(tǒng)的數(shù)據(jù)庫的數(shù)據(jù)量相當龐大且對數(shù)據(jù)庫的響應(yīng)性能要求很高,Oracle是目前應(yīng)用最為廣泛的數(shù)據(jù)庫管理系統(tǒng)之一,提高Oracle數(shù)據(jù)庫系統(tǒng)的運行效率,是整個計算機信息系統(tǒng)高效運行的必備前提和保證。本文以O(shè)racle數(shù)據(jù)庫優(yōu)化技術(shù)理論為指導(dǎo),結(jié)合一個實際的數(shù)據(jù)庫應(yīng)用系統(tǒng),深入研究了Oracle優(yōu)化技術(shù)在系統(tǒng)的應(yīng)用方法與策略。
2、數(shù)據(jù)庫參數(shù)設(shè)置
2.1 CPU參數(shù)的調(diào)整
CPU是服務(wù)器的一項主要資源。服務(wù)器良好的工作狀態(tài)時在工作高峰時,CPU的使用率在90%以上。如果空閑時間CPU的使用率就在90%以上,說明服務(wù)器缺乏資源。
對UNIX操作系統(tǒng)的服務(wù)器,可以使用sar-u命令查看CPU的使用率。可以通過查看$sysstm數(shù)據(jù)字典“CPU used by this session”統(tǒng)計項得知ORACLE數(shù)據(jù)庫使用的CPU時間,查看“OSUserlevelCPU time”統(tǒng)計項得知操作系統(tǒng)用戶狀態(tài)下的CPU時間,查看“OSSystem call CPU time”統(tǒng)計項得知操作系統(tǒng)狀態(tài)下的CPU時間。
還可以通過查看v$sysstat數(shù)據(jù)字典來獲得當前連接ORACLE數(shù)據(jù)庫的各個會話占用的CPU時間,從而得知什么會話耗用服務(wù)器的CPU比較多。
3、表分區(qū)和建立索引
3.1 Oracle數(shù)據(jù)庫分區(qū)通過ORACLE數(shù)據(jù)庫的分區(qū)技術(shù),能夠有效地提高各終端程序的運行性能,達到服務(wù)器數(shù)據(jù)庫應(yīng)用性能優(yōu)化的目的。在ORACL E數(shù)據(jù)庫中,只有表和索引可以分區(qū),表和索引分區(qū)后,同樣對用戶是透明的。由于表的邏輯結(jié)構(gòu)沒有任何變化,用戶仍可按非分區(qū)表那樣對分區(qū)表進行操作。而且在應(yīng)用開發(fā)過程中,也可以充分利用其特點,發(fā)揮其所帶來的優(yōu)勢。此處僅闡述表的分區(qū)。表分區(qū)建立的原則有以下三點:
1.基于數(shù)據(jù)訪問量的原則:當分區(qū)表的訪問數(shù)據(jù)量十分大時,可用數(shù)據(jù)的訪問量作為分區(qū)原則,保證每個分區(qū)的數(shù)據(jù)訪問量大致均衡。
2.基于數(shù)據(jù)容量的原則:在決定分區(qū)的范圍界限時,能使分區(qū)表中的每個分區(qū)的數(shù)據(jù)量大致相同。
3.基于數(shù)據(jù)訪問頻率的原則:當對分區(qū)表的訪問非常頻繁時,可以將劃分原則定為訪問頻率,即劃定分區(qū)范圍界限時保證每個分區(qū)的訪問頻率基本相同。
Oracle提供5種分區(qū)的方法用于對表進行分區(qū),每種方法都具有各自不同的應(yīng)用特征,在實際應(yīng)用中需根據(jù)需求及分區(qū)鍵的屬性特征選定一種適合的分區(qū)方法。
1.范圍分區(qū):由一定范圍值的分區(qū)關(guān)鍵字指定每個分區(qū),這是最常用的分區(qū)類型,而且常常分區(qū)鍵為日期類型。經(jīng)常查詢一定時間范圍的表時可以考慮使用時間字段劃分范圍分區(qū)。
2.列表分區(qū):由列表值的分區(qū)關(guān)鍵字指定每個分區(qū),能夠準確地控制數(shù)據(jù)行到分區(qū)的映射,用一種自然地方式組織無序和無關(guān)聯(lián)的數(shù)據(jù)集。如果某個表的數(shù)據(jù)能夠按照某個字段的值分為數(shù)目大小相近的幾部分且經(jīng)常查詢的數(shù)據(jù)總屬于一個部分時可以考慮使用列表分區(qū)。
3.散列分區(qū):將散列算法用于分區(qū)關(guān)鍵字來確定指定行的分區(qū),通過散列函數(shù)控制數(shù)據(jù)行到分區(qū)的映射,分區(qū)易于實現(xiàn),并且有助于提高并行查詢,連接等操作的執(zhí)行性能。通常無法有效劃分范圍的表可以使用散列分區(qū)。
4.組合分區(qū):組合分區(qū)首先進行范圍分區(qū),然后在每個子分區(qū)中使用散列或列表分區(qū)。如果某表按照某列分區(qū)之后,仍然較大,或者一些其它的需求,就可以通過分區(qū)內(nèi)再建子分區(qū)的方式將分區(qū)再分區(qū),即組合分區(qū)。
3.2 Oracle數(shù)據(jù)庫索引優(yōu)化Oracle的索引,是最常用的數(shù)據(jù)庫優(yōu)化手段,索引就好像字典的目錄。合適的好的索引,不但能極大的優(yōu)化查詢的性能,還能優(yōu)化與查詢相關(guān)的操作的性能。
4、sql語句優(yōu)化
從很多系統(tǒng)的應(yīng)用來看,SQL語句的書寫技巧和優(yōu)劣往往是系統(tǒng)在使用一段時間后性能是否下降的關(guān)鍵因素。Oracle數(shù)據(jù)庫sQL語句優(yōu)化的原則如下:
4.1 優(yōu)化排序操作
1.對常常進行排序和連接操作的字段建立索引,這部分參考本文第三部分。
2.書寫sql語句盡量使用索引
如果sql語句where條件中的列沒有建立函數(shù)索引,則避免使用該列的函數(shù)作為查詢條件的一部分,此時可以考慮建立函數(shù)索引;避免在sql語句中使用“!_”和“<>”操作符;避免比較不匹配的數(shù)據(jù)類型;盡量去掉“IN”和“OR”,避免使用“NOTIN”;盡可能去掉where子句中IsNULL和IsNOTNULL。
4.2 盡量減少排序操作
1.用union all代替union
UNION在進行表鏈接后會篩選掉重復(fù)的記錄,所以在表鏈接后會對所產(chǎn)生的結(jié)果集進行排序運算,刪除重復(fù)的記錄再返回結(jié)果。因為UNION ALL操作只是簡單的將兩個結(jié)果合并后就返回。
2.用where代替having
避免使用having子句,havmg只會在檢索出所有記錄之后才對結(jié)果集進行過濾。這個處理需要排序、總計等操作。如果能通過WHERE子句限制記錄的數(shù)目,那就能減少這方面的開銷。
3.盡量減少使用group by對大數(shù)據(jù)量分組
使用group by對數(shù)據(jù)分組時,還要對記錄進行排序操作,而排序是很耗資源的。如果僅僅為了查詢某個字段重復(fù)的記錄中的一條數(shù)據(jù),可以用另外的字段標識出查詢時主鍵最小的那條記錄,而不要使用groupby字句
4.3 盡量減少數(shù)據(jù)庫的I/O操作
過多的I/O操作會占用CPU時間、消耗大量內(nèi)存,因此有必要對SQL的I/O進行優(yōu)化。
1.盡量使用索引,減少全表掃描
2.注意where子句中的條件順序,把能夠過濾掉最大記錄條數(shù)的條件寫在where子句的末尾
3.選擇合適的表名排列順序,from子句中把記錄數(shù)最小的表作為基礎(chǔ)表放在最后邊。
4.盡量減少表的訪問次數(shù)。
5、結(jié)束語
對基于oracle的數(shù)據(jù)庫系統(tǒng)來說,對數(shù)據(jù)庫的效率進行優(yōu)化,重點在于優(yōu)化查詢的效率,高效查詢與低效率查詢的差別是較大的.本文通過運用分析研究oracle優(yōu)化技術(shù)的各個層面,并把這些技術(shù)方法運用到實際的信息系統(tǒng)優(yōu)化中,使得系統(tǒng)的查詢效率有較大的提升。