摘 要:持續(xù)擴(kuò)大的數(shù)據(jù)庫規(guī)模,用戶數(shù)量的增多,大大降低了數(shù)據(jù)庫應(yīng)用系統(tǒng)的響應(yīng)速度,暴露了很多數(shù)據(jù)庫性能問題。對數(shù)據(jù)庫進(jìn)行性能優(yōu)化能促進(jìn)整個系統(tǒng)的正常運行,提高數(shù)據(jù)庫的穩(wěn)定性和使用性能,確保數(shù)據(jù)庫的高效運行,提高應(yīng)用價值。本文針對Oracle數(shù)據(jù)庫性能的一些影響因素,提出一系列優(yōu)化措施,推動Oracle數(shù)據(jù)庫更好的為人們服務(wù)。
關(guān)鍵詞:Oracle數(shù)據(jù)庫;性能優(yōu)化;措施
中圖分類號:TP311.138
隨著計算機(jī)科學(xué)技術(shù)的快速發(fā)展,數(shù)據(jù)庫能提供的服務(wù)水平標(biāo)志著各國家的科技水平、經(jīng)濟(jì)實力和文明程度,是現(xiàn)代信息產(chǎn)業(yè)的基本建設(shè)工程。數(shù)據(jù)庫技術(shù)應(yīng)用最初應(yīng)用與傳統(tǒng)商務(wù)數(shù)據(jù)處理,后逐漸在多媒體應(yīng)用、商業(yè)管理、計算機(jī)圖像等領(lǐng)域得到應(yīng)用。而如何確保數(shù)據(jù)庫的安全、高效運行,則要考慮數(shù)據(jù)庫的性能問題。數(shù)據(jù)庫規(guī)模的日益擴(kuò)大化,越發(fā)凸顯了數(shù)據(jù)庫系統(tǒng)的性能問題,為使數(shù)據(jù)庫應(yīng)用系統(tǒng)正常、高效地運行,必須進(jìn)行數(shù)據(jù)庫優(yōu)化措施的探討。
1 Oracle數(shù)據(jù)庫性能影響因素
1.1 CPU 占用過高。CPU是處理軟件中數(shù)據(jù)的中央處理器,任何數(shù)據(jù)庫中的操作都要在CPU中進(jìn)行指令讀取和執(zhí)行。當(dāng)有限的CPU資源大量被其它應(yīng)用占用時,整個系統(tǒng)的反應(yīng)速度將下降,導(dǎo)致數(shù)據(jù)庫響應(yīng)遲鈍。其中Oracle數(shù)據(jù)庫系統(tǒng)低效SQL語句、中鎖沖突都會占用CPU資源,降低系統(tǒng)反應(yīng)速度。
1.2 操作系統(tǒng)。Oracle數(shù)據(jù)庫的操作系統(tǒng)是其重要組成部分,操作系統(tǒng)很大程度上影響著Oracle數(shù)據(jù)庫服務(wù)器的運行性能。操作系統(tǒng)主要問題部分是配置方面問題,需要調(diào)整Oracle使用的操作系統(tǒng)資源。
1.3 計算機(jī)內(nèi)存分配不合理。當(dāng)內(nèi)存不足時,我們喜歡設(shè)置虛擬內(nèi)存來暫時解決這個問題,但實際上虛擬內(nèi)存依舊建立在磁盤空間上,不能解決實際問題。因為設(shè)有虛擬內(nèi)存的系統(tǒng),將交換內(nèi)存中的信息和這部分磁盤空間,這種頻繁的運轉(zhuǎn)方式很大程度上增加了磁盤的讀寫操作,減少了最近訪問數(shù)據(jù)的緩存空間,從而降低了系統(tǒng)性能。
1.4 網(wǎng)絡(luò)速度慢。網(wǎng)絡(luò)反映速度慢對數(shù)據(jù)庫系統(tǒng)的吞吐量也會大幅降低并使用戶響應(yīng)時間延長。
1.5 I/O沖突。I/O沖突很大程度上降低了Oracle數(shù)據(jù)庫系統(tǒng)性能。這是由于在數(shù)據(jù)庫系統(tǒng)中可能發(fā)生一個磁盤同時被多個進(jìn)程同時訪問,但一個磁盤一個時間內(nèi)一次只能被一個進(jìn)程訪問,當(dāng)發(fā)生多個進(jìn)程同時訪問時,磁盤內(nèi)部很容易產(chǎn)生讀寫沖突,降低數(shù)據(jù)庫系統(tǒng)反應(yīng)速度。
2 Oracle數(shù)據(jù)庫性能優(yōu)化目標(biāo)
2.1 增加Oracle數(shù)據(jù)庫的吞吐量。Oracle數(shù)據(jù)庫的吞吐量是指在單位時間內(nèi),對SQL語句的事務(wù)處理量。提高Oracle數(shù)據(jù)庫吞吐量的方法是在同樣的資源下提高工作效率,完成更多的任務(wù),或在相同時間內(nèi)完成更多任務(wù)。
2.2 縮短Oracle數(shù)據(jù)庫響應(yīng)時間。數(shù)據(jù)庫響應(yīng)時間是指花費在用戶從提交SQL語句到獲得結(jié)果集的第一行數(shù)據(jù)之間的時間??s短Oracle數(shù)據(jù)庫響應(yīng)時間:(1)減少系統(tǒng)服務(wù)時間,即通過增加Oracle數(shù)據(jù)庫的吞吐量;(2)減少用戶等待時間,即減少用戶請求處理時間,也就是同時訪問Oracle數(shù)據(jù)庫資源而產(chǎn)生的沖突等,提高系統(tǒng)資源利用率。
2.3 提高Oracle數(shù)據(jù)庫的命中率。內(nèi)存是否能滿足用戶對數(shù)據(jù)的需求,并作出快速響應(yīng),這需要在緩沖區(qū)進(jìn)行高速緩存命中率計算來衡量。而在高速緩存中讀數(shù)據(jù)比磁盤中讀數(shù)據(jù)占用更少的內(nèi)存,因此,提高高速緩存命中率有助于提高響應(yīng)速度。
2.4 合理使用內(nèi)存。若存在大量的用戶同時訪問數(shù)據(jù)庫,當(dāng)Oracle內(nèi)存尺寸較小時,很容易造成程序的處理效率低下,使得數(shù)據(jù)庫的響應(yīng)時間延長。判斷是否合理使用內(nèi)存的指標(biāo)有使投資得到最大回報、使?fàn)幱脺p到最小。只有在合理使用內(nèi)存的情況下,才能較大程度的提高系統(tǒng)性能。
3 Oracle數(shù)據(jù)庫性能優(yōu)化措施
3.1 優(yōu)化數(shù)據(jù)庫。(1)優(yōu)化數(shù)據(jù)庫設(shè)計才能更好的實現(xiàn)Oracle數(shù)據(jù)庫性能最優(yōu)化,因此,必須設(shè)計出一個較好的Oracle數(shù)據(jù)庫方案。而Oracle系統(tǒng)本身己經(jīng)為數(shù)據(jù)庫的優(yōu)化提供了若干種技術(shù),但Oracle數(shù)據(jù)庫設(shè)計本身還是占據(jù)主導(dǎo)地位。(2)在數(shù)據(jù)庫中增加索引,這也是最常見的優(yōu)化方法。索引(index)是數(shù)據(jù)庫中的常見對象,通過索引可以使表掃描I/O次數(shù)大量減少,且不必要的大表全表掃描通通可以避免。設(shè)置索引的位置由where子句中索引列規(guī)定的查詢條件決定。在數(shù)據(jù)庫中增加索引,可大幅度提高查詢速度。(3)對數(shù)據(jù)庫中頻繁執(zhí)行的應(yīng)用邏輯可以通過存儲過程完成,且使數(shù)據(jù)庫的操作與代碼編程分離,從而實現(xiàn)網(wǎng)絡(luò)傳輸量降低的同時數(shù)據(jù)請求的執(zhí)行效率也提高。用戶發(fā)出執(zhí)行命令即可執(zhí)行存儲過程,不需通過SQL語句提交進(jìn)行,減少了系統(tǒng)分析SQL語法。(4)對于數(shù)據(jù)量增長非??斓臉I(yè)務(wù),可以在分區(qū)表技術(shù)下先進(jìn)行數(shù)據(jù)分散,從而使不同表空間在不同的磁盤中得到分布,均衡各硬盤之間的I/O 負(fù)載,有效緩解由于過大的數(shù)據(jù)量而導(dǎo)致的負(fù)面影響并降低查詢時間。
3.2 優(yōu)化SQL語句。優(yōu)化Oracle數(shù)據(jù)庫應(yīng)用程序,可以通過優(yōu)化源代碼和優(yōu)化SQL語句兩方面。而SQL語句消耗了70%~90%的數(shù)據(jù)庫資源,執(zhí)行SQL語句的效率將直接影響Oracle數(shù)據(jù)庫的執(zhí)行效率。通過優(yōu)化劣質(zhì)SQL語句,提高內(nèi)存命中率,加快執(zhí)行速度,減少I/O訪問和網(wǎng)絡(luò)傳輸,發(fā)揮數(shù)據(jù)庫性能。
(1)對數(shù)據(jù)庫緩沖區(qū)的SQL解析信息充分利用。對于一些SQL語句,雖然經(jīng)常運行,但條件子句變量值不同,則需要對其進(jìn)行變量綁定,更改為統(tǒng)一的變量。(2)調(diào)整SQL的關(guān)鍵語句,最優(yōu)化數(shù)據(jù)庫尋找數(shù)據(jù)路徑。對一些動態(tài)SQL要限制使用,并優(yōu)化操作符,如盡量少用in或not in,like,union等操作符。(3)優(yōu)化SQL語句的索引。如索引列采取is 1 和is not 1語句,如采取函數(shù)來處理字段,如采取顯式或隱式的運算,這些都將提高系統(tǒng)處理效率。
3.3 優(yōu)化Oracle數(shù)據(jù)庫內(nèi)存分配和磁盤I/O。由一組Oracle后臺進(jìn)程和SGA的一個內(nèi)存區(qū)組成Oracle實例,而數(shù)據(jù)庫系統(tǒng)的性能又很大程度上受SGA使用效率的影響,因此,優(yōu)化Oracle數(shù)據(jù)庫運行狀況需要進(jìn)行SGA的優(yōu)化。在信息系統(tǒng)運行過程中,進(jìn)行Oracle數(shù)據(jù)庫內(nèi)存分配的優(yōu)化,且必須在磁盤I/O優(yōu)化前進(jìn)行。
Oracle數(shù)據(jù)庫中磁盤I/O操作很大程度上影響其性能,必須優(yōu)化磁盤I/O。而影響磁盤I/O性能的主要因素是數(shù)據(jù)塊空間的分配管理、磁盤競爭、操作系統(tǒng)性能等。具體優(yōu)化措施有以下幾方面:(1)對I/O 爭用較多的往往也是一些經(jīng)常使用的對象,因此,在獨立磁盤上放置一些訪問量較大的數(shù)據(jù)文件,在不同的磁盤上放置同一個表空間的多個數(shù)據(jù)文件,建立單獨的表空間進(jìn)行索引,且表和索引在不同的表空間放置。(2)用戶數(shù)據(jù)表空間需要單獨創(chuàng)建,并在不同磁盤放置用戶表空間和系統(tǒng)表空間,排序操作可使用臨時表空間,避免在多個表空間內(nèi)存放數(shù)據(jù)庫碎片。(3)選取廉價磁盤冗余陣列(raid)進(jìn)行優(yōu)化。其能對不同類型、訪問頻率的數(shù)據(jù)庫文件進(jìn)行自動分離,一定程度降低I/O進(jìn)程間的競爭,優(yōu)化Oracle數(shù)據(jù)庫性能。
參考文獻(xiàn):
[1]Edward Whalen,Mitchell Schroeter著,高艷春等譯.Oracle性能調(diào)整與優(yōu)化(第一版)[M].北京:人民郵電出版社,2002.
[2]趙大力,靳其兵,趙梅.Oracle數(shù)據(jù)庫優(yōu)化解決方案[J].計算機(jī)應(yīng)用,2005(03):45-46.
[3]陳建云,林春艷,曾昊川.Oracle應(yīng)用系統(tǒng)數(shù)據(jù)庫的優(yōu)化探討[J].信息安全與技術(shù),2014(12).
[4]熊江紅.ORACLE數(shù)據(jù)庫的調(diào)優(yōu)問題分析[J].民營科技,2014(10).
作者單位:北京樂金系統(tǒng)集成有限公司,北京 300202