數(shù)據(jù)庫應(yīng)用論文(2)
數(shù)據(jù)庫應(yīng)用論文篇二
《數(shù)據(jù)庫應(yīng)用系統(tǒng)性能優(yōu)化研究與實踐》
摘要:本文主要從數(shù)據(jù)庫服務(wù)器內(nèi)存參數(shù)調(diào)整,SQL語句優(yōu)化兩方面論述如何在系統(tǒng)設(shè)計,運行過程中對Oracle數(shù)據(jù)庫進行性能優(yōu)化。數(shù)據(jù)庫服務(wù)器內(nèi)存參數(shù)調(diào)整主要論述共享池的大小設(shè)置問題,SQL語句優(yōu)化主要從Oracle解析SQL語句的機制方面來論述如何寫出高效的SQL語句。通過上述方面的調(diào)優(yōu)以確保數(shù)據(jù)庫系統(tǒng)的性能。
關(guān)鍵詞:數(shù)據(jù)庫性能優(yōu)化 逆規(guī)范化設(shè)計 優(yōu)化策略
中圖分類號:TP311.13 文獻標識碼:A 文章編號:1007-9416(2012)07-0058-01
1、對數(shù)據(jù)庫服務(wù)器內(nèi)存分配的調(diào)整
由于對服務(wù)器內(nèi)存參數(shù)的調(diào)整對oracle的性能影響顯著,它成為Oracle數(shù)據(jù)庫性能調(diào)優(yōu)的首選對象。服務(wù)器內(nèi)存參數(shù)的調(diào)整主要是對數(shù)據(jù)庫系統(tǒng)全局區(qū)的調(diào)整,系統(tǒng)全局區(qū)包括共享池、數(shù)據(jù)緩沖區(qū)、日志緩沖區(qū)。其中最主要的是對數(shù)據(jù)緩沖區(qū)和共享池的參數(shù)調(diào)整。
數(shù)據(jù)庫緩沖區(qū)的作用主要是將從磁盤中讀取的數(shù)據(jù)塊存放在內(nèi)存緩存中,從這個意義上說數(shù)據(jù)庫緩沖區(qū)越大,存放的共享數(shù)據(jù)就越多,減少了對磁盤數(shù)據(jù)的物理讀操作,也就提高了系統(tǒng)的響應(yīng)速度。
共享池的作用主要是用來存放最近使用過的sql語句的,它由一個最近最少使用的算法來管理,由庫高速緩存和數(shù)據(jù)字典緩沖區(qū)兩部分組成。修改這一參數(shù)的設(shè)置,能提高系統(tǒng)性能,是由Oracle數(shù)據(jù)庫系統(tǒng)處理用戶提交的SQL語句的步驟決定的。
2、Sql優(yōu)化
由于應(yīng)用程序的執(zhí)行最終歸結(jié)為后臺數(shù)據(jù)庫中SQL語句的執(zhí)行,SQL語句本身的執(zhí)行效率就成為了影響oracle數(shù)據(jù)庫執(zhí)行效率的一個重要因素,當(dāng)我們對Oracle處理SQL語句的機制有所了解,通過對SQL語句進行適當(dāng)?shù)恼{(diào)整,就能提高Oracle數(shù)據(jù)庫系統(tǒng)的性能。
(1)在基于規(guī)則的優(yōu)化器中,Oracle對from子句中的表名是按照從右到左的順序進行解析的,即:From子句中排在最后的表會被首先處理。我們把這張表稱做驅(qū)動表。當(dāng)from字句中包含多個標的情況下,oracle是通過排序合并的方式連接這些表的,為了提高oracle的執(zhí)行效率,應(yīng)當(dāng)選擇包含記錄條數(shù)少的表作為驅(qū)動表,即放在from子句的最后。
(2)在oracle語句中,where子句的執(zhí)行順序是自下而上的對語句進行解析的。為了提高sql語句的執(zhí)行效率,應(yīng)該將能過濾掉大量數(shù)據(jù)的條件寫在where子句的最后。
(3)在selcect語句中使用*雖然對編程人員簡單方便,oracle會自動列出所有列名,但oracle解析*時則是通過查詢數(shù)據(jù)字典來完成對*的轉(zhuǎn)換的,這樣耗費了更多的時間用來查詢數(shù)據(jù)字典,轉(zhuǎn)換,必然降低執(zhí)行效率,因此在selcect語句中應(yīng)當(dāng)直接列出所有的列名。
(4)用where子句代替having子句,在where子句中排除不需要的記錄,這樣的執(zhí)行效率將遠遠高于執(zhí)行完成之后用having子句對記錄進行篩選。
3、軟件開發(fā)模式優(yōu)化策略
3.1 避免訪問回滾段
如果查詢數(shù)據(jù)庫時,要訪問的數(shù)據(jù)正被另外用戶修改,數(shù)據(jù)庫為了維護讀一致性,需要訪問會滾段來讀取查詢語句執(zhí)行時刻的數(shù)據(jù)值。如果應(yīng)用程序需要經(jīng)常讀取正在被其它用戶修改的數(shù)據(jù),數(shù)據(jù)庫系統(tǒng)為了得到一個數(shù)據(jù),不得不多次訪問磁盤。數(shù)據(jù)庫管理員可通過配置回滾段來減少查詢時“snapshot tooold”錯誤的發(fā)生。解決這個問題的根本方法還是需要重新修改應(yīng)用程序設(shè)計,合理對事務(wù)進行劃分。
3.2 表的分區(qū)和并行技術(shù)
如果必須要在數(shù)據(jù)庫運行特別耗時的操作。應(yīng)盡量地把這樣的操作分解,嚴格限制操作所涉及的記錄數(shù),并設(shè)法使操作并行,充分地提高執(zhí)行效率。
(1)使用分區(qū)。分區(qū)技術(shù)有兩個潛在的好處:提高查詢性能和提高數(shù)據(jù)庫可用性。數(shù)據(jù)庫查詢時,優(yōu)化器知道那些分區(qū)包含查詢所要的數(shù)據(jù)。而其它分區(qū)數(shù)據(jù)將不會被讀取,從而查詢?nèi)蝿?wù)將更快完成。許多管理工作可在只一個分區(qū)上進行,而不影響其它分區(qū)的數(shù)據(jù)。例如可以選擇只刪除一個表分區(qū)中的數(shù)據(jù)。
(2)使用并行。Oracle數(shù)據(jù)庫中幾乎所有的操作都支持并行特性,包括查詢、插入、和數(shù)據(jù)加載。并行選項可以使多個處理器同時處理一條命令,在創(chuàng)建庫數(shù)據(jù)庫對象時可以設(shè)定并行參數(shù),也可在查詢語句中重新設(shè)。
4、軟件測試優(yōu)化策略
許多情況下由于開發(fā)進度等原因,軟件性能壓力測試都進行的不充分。這就導(dǎo)致軟件產(chǎn)品交付時,不能確保軟件性能滿足用戶需求。這點常常被開發(fā)人員忽視。用戶不僅需要軟件能完成一定功能,更需要軟件能支撐自己業(yè)務(wù)的運行。因此應(yīng)用軟件性能不能滿足業(yè)務(wù)處理的速度要求,軟件系統(tǒng)就需要優(yōu)化。測試必須驗證軟件性能能否在希望負載情況下,滿足業(yè)務(wù)處理的速度要求。
(1)用大量的數(shù)據(jù)進行測試。系統(tǒng)使用一段時間后,數(shù)據(jù)庫的性能會發(fā)生變化。例如oracle數(shù)據(jù)庫一個表的pctfree和pctused參數(shù)設(shè)置可能會使數(shù)據(jù)塊只有一半的空間被利用或使數(shù)據(jù)庫記錄鏈接(chained)。上面的情形都會引起數(shù)據(jù)庫性能問題,且只有在應(yīng)用程序使用了一段時間后才能被發(fā)現(xiàn)。
(2)足夠多的用戶并發(fā)測試。只有一個測試用戶大多數(shù)情況下不能反映軟件真實使用情況下的負載情況。我們必須測試在多個并發(fā)用戶情況下是否會引起死鎖(deadlock)以及性能下降等問題。
5、結(jié)語
數(shù)據(jù)庫應(yīng)用系統(tǒng)的性能優(yōu)化遠不是按照廠家所列的有關(guān)指南通過短短的幾步就可以達到的。要想獲得最大的優(yōu)化效果,既需要具有廣泛而深人的數(shù)據(jù)庫原理和系統(tǒng)實踐知識,又要有扎實的應(yīng)用程序設(shè)計能力,同時要充分熟悉操作系統(tǒng)和有關(guān)的軟硬件環(huán)境。筆者在實際工作中利用這些策略進行了數(shù)個數(shù)據(jù)庫應(yīng)用系統(tǒng)設(shè)計,這些系統(tǒng)都表現(xiàn)出了良好的運行性能。
參考文獻
[1]Gaja Krishna Vaidyanatha.Oracle性能優(yōu)化技術(shù)內(nèi)幕.機械工業(yè)出版社,2010,5:284.
[2]李愛武.Oracle數(shù)據(jù)庫系統(tǒng)原理.北京郵電大學(xué)出版社,2009-3-1:210.
看過“數(shù)據(jù)庫應(yīng)用論文”的人還看了:
1.關(guān)于計算機數(shù)據(jù)庫運用方面的論文
3.淺談交通運輸信息平臺數(shù)據(jù)庫的實現(xiàn)論文
4.關(guān)于計算機數(shù)據(jù)庫技術(shù)的論文