摘 要:隨著計算機網(wǎng)絡系統(tǒng)快速發(fā)展,不斷增加的客戶端數(shù)量對數(shù)據(jù)庫規(guī)模提出新要求。從實況來看,應用數(shù)據(jù)庫的響應速度在不斷下降,各種性能問題逐漸突出。各種完善措施僅僅是階段性的,而且成本也比較高,極難提升系統(tǒng)的整體運行效率及性能目標,因此優(yōu)化數(shù)據(jù)庫系統(tǒng)性能對整個系統(tǒng)正常運行具有重要作用。本文是筆者結(jié)合常州市房產(chǎn)地理信息管理系統(tǒng)中日常維護及應用Oracle數(shù)據(jù)庫的相關經(jīng)驗,分析優(yōu)化提升信息系統(tǒng)Oracle數(shù)據(jù)庫的性能。
關鍵詞:信息系統(tǒng);Oracle數(shù)據(jù)庫;性能優(yōu)化
中圖分類號:TP392
從我國實況來看信息系統(tǒng)還存在各種不足,比如怎樣充分發(fā)揮計算機系統(tǒng)資源,怎樣確保用戶的服務質(zhì)量及響應速度等。因此,研究優(yōu)化Oracle數(shù)據(jù)庫的性能具有適用價值。
1 信息系統(tǒng)Oracle數(shù)據(jù)庫性能優(yōu)化
筆者就從Oracle數(shù)據(jù)庫系統(tǒng)中選擇I/O、內(nèi)存、SQL語句以及網(wǎng)絡性能方面入手,分析這些組成部分在運行中性能發(fā)送的一些問題,并且針對這些問題提出合理的優(yōu)化措施。
1.1 對內(nèi)存進行優(yōu)化
優(yōu)化內(nèi)存比較常用方法就是調(diào)整系統(tǒng)的全局區(qū)(SGA)。具體操作就是調(diào)整內(nèi)存中各種組件,包含JAVA池、緩沖區(qū)高速緩存等,對內(nèi)存結(jié)構進行調(diào)整時需要加大SGA大小,但是必須要確保SGAS長度一定在實際所用內(nèi)存范圍之中。
1.2 調(diào)整共享池
共享池主要有兩個部分組成,即高速緩存和數(shù)據(jù)字典緩存。其參數(shù)就確定了共享池的大小。而在高速緩存模塊中又是由SQL語句文本,執(zhí)行計劃以及PL/SQL塊、JAVA類共同組成。將“select namespace,gethitratio from v$librarycache”輸送到執(zhí)行欄目中,就能夠從數(shù)據(jù)庫中獲取到緩存的統(tǒng)計信息。在該執(zhí)行語句中gethitratio主要是實現(xiàn)查詢對象的句柄標識名字和次數(shù)之間比率。在該數(shù)據(jù)庫中,如果該比率低于了95%,就要進行調(diào)整。其查詢語句是“select sum(pins-reloads)/sum(pins)*100 from v$librarycache”,通過執(zhí)行該局于就可以得到高速緩存命中率。數(shù)據(jù)字典的緩存就是把數(shù)據(jù)字典中所含的各種信息存儲進去。SQL語句查詢對象信息時是通過數(shù)據(jù)字典進行高速存取,降低了不緩存之時從數(shù)據(jù)字典中查詢的次數(shù),通過這種查詢方式就能夠提升其性能。而且對v$rowcache動態(tài)性能視圖進行查詢,可以得到數(shù)據(jù)字典中緩存相關信息,輸入執(zhí)行語句“select(sum(gets-getmisses))/sum(gets) from v$rowcache”,通過執(zhí)行后就可以得到數(shù)據(jù)字典中的緩存命中率。一旦最終結(jié)果值低于85%,必然要增大共享池容量才可以。
1.3 調(diào)整緩沖區(qū)的高速緩存
在SGA中,高速緩存是重要的組件之一,在執(zhí)行保持之時高速緩存區(qū)就是負責對磁盤中相關數(shù)據(jù)進行讀取、拷貝,保持服務器就能夠?qū)λ锌截悏K進行共享。假如該服務器要得到數(shù)據(jù)塊,就會先到高速緩存之中去查詢所需數(shù)據(jù),如果需要的數(shù)據(jù)在這個緩沖區(qū)之中,那么該進程就可以從高速緩沖區(qū)之中直接讀取所需數(shù)據(jù),如果數(shù)據(jù)并未在這個高速緩存之中,必然會從磁盤中相關數(shù)據(jù)文件進行讀取,同時還將所讀取數(shù)據(jù)存儲進高速緩存之中,之后這些存儲的數(shù)據(jù)就能夠被服務器的進程使用。因此要盡可能讓進程讀取緩沖區(qū)的高速緩存中數(shù)據(jù),并且經(jīng)過相關的查詢語句就可以執(zhí)行,還能夠通過查詢得到使用高速緩存各種情況。
1.4 調(diào)整重做日志緩沖區(qū)
重做日志的緩沖區(qū),也就要在內(nèi)存中對高速緩存進行重做。一般情況下,該緩沖區(qū)的容量有1MB就可以的。但是該緩沖區(qū)一旦占據(jù)的空間三分之一,就會發(fā)出“rollback”和“commit”的命令,或者將DBWn進程寫進到LGWR之中,通過這種方式就可以重做日志的緩沖區(qū),將磁盤中重新寫入內(nèi)容。如果要想恢復數(shù)據(jù)庫,必須要通過重做日志的緩沖區(qū)之中各種項目,這一種操作非常重要。要查詢重做日志緩沖區(qū)中效率,輸入相關的查詢語句就能夠查詢結(jié)果,最終查詢結(jié)果值只有接近0才正常,假如這個值不斷的增大,就要適當增大log_buffer大小。
1.5 優(yōu)化I/O
事實上,影響Oracle數(shù)據(jù)庫性能一種主要原因就是磁盤I/O,一旦解決好了I/O,就能夠有效提升數(shù)據(jù)庫性能,配置數(shù)據(jù)庫性能準則即為盡可能的降低磁盤I/O及平衡多個磁盤的驅(qū)動器,并且還要盡可能使用本地管理的空間,對動態(tài)視圖進行查詢就可以得到數(shù)據(jù)文件中的I/O 性能。在平衡I/O,能夠采用的策略主要有如下幾種:
(1)把訪問次數(shù)比較多的數(shù)據(jù)文件促進獨立的磁盤上。
(2)給用戶數(shù)據(jù)創(chuàng)建出單獨的表空間,并且把這個表空間單獨放到system表中。
(3)有幾個數(shù)據(jù)文件存在于同樣表空間之中,就要存放到不同的磁盤之中。
(4)索引應該處于獨立表空間中,還應該把索引以及表的數(shù)據(jù)存放至不同磁盤之中。
(5)構建出臨時的表空間,用來實現(xiàn)排序操作,這樣就能夠有效阻止數(shù)據(jù)庫中碎片進入表空間中,同時創(chuàng)建獨立表空間給回滾段。
(6)盡可能做大日志文件,避免切換日志過于頻繁;同時重做日志文件不要和數(shù)據(jù)庫文件放進同一個磁盤中,降低磁盤之間的競爭。
1.6 優(yōu)化CPU
當數(shù)據(jù)庫中的I/O操作到了最低的程度,同時也分配了足夠的內(nèi)存,但是應用軟件依然遭到CPU約束。優(yōu)化CPU目標就要讓CPU盡可能滿足用戶所需,同時盡可能減小等待以及額外的開銷影響到CPU,并且服務器能不能夠正常的工作直接關系著CPU,當工作高峰CPU使用率處于90%標識著服務器具有良好工作狀態(tài)。但是假如空閑之時CPU的使用率超過了90%,說明服務器中的CPU資源不足。如果出于工作的高峰,CPU的使用率依然比較低,這就說明服務器中的CPU資源比較充足。
在運行中,管理數(shù)據(jù)庫人員只要查詢數(shù)據(jù)字典中相關統(tǒng)計項,就可以查詢Oracle 數(shù)據(jù)庫使用CPU所占據(jù)時間,同時將相關查詢語句輸入到執(zhí)行程序中,就可以獲取到該操作系統(tǒng)使用了CPU所占據(jù)的時間,當然操作系統(tǒng)使用時間也就是用戶態(tài)+系統(tǒng)態(tài)的時間總和。數(shù)據(jù)庫占據(jù)了時間超過了總時間90%,這就說明服務器之中CPU幾乎都讓Oracle數(shù)據(jù)庫占據(jù)了,表明運行良好;如果其他各種程序?qū)PU資源全部占有,Oracle數(shù)據(jù)庫必然無法活兒更多的CPU資源及時間。查詢v$sesstat數(shù)據(jù)字典就能夠知道目前所連接的Oracle 數(shù)據(jù)庫中每一個回話所占用CPU時間,就能夠知道會話所占用服務器CPU的時間情況,以及導致CPU資源缺乏根源,事實上重解析SQL語句,鎖沖突等均可能造成CPU資源嚴重不足。管理人員將相關查詢語句輸入,該語句能夠查詢解析SQL語句的情況,執(zhí)行語句中的parse time cpu就表示出系統(tǒng)所用時間,執(zhí)行語句中的parse time elapsed為響應時間,而用戶等待的時間采用公式可獲取。而且從該公式之中還能夠得到解析SQL語句中平均等待的時間,如果這個平均值靠近0,就表明系統(tǒng)正常,一旦等待解析的平均時間較長,就要從中查詢解析效率比較低,應該優(yōu)化相關的語句,同時還應該改變Oracle中的參數(shù),通過參數(shù)來增加高速緩存的光標數(shù)值。當然,數(shù)據(jù)庫的管理人員還能夠采取查詢語言(select buffer_gets, executions, sql_textfrom v$sqlarea),而且該查詢語句還能夠?qū)Φ托实腟QL語句進行查詢,對該語句進行優(yōu)化同樣能夠提升CPU利用效率。
1.7 優(yōu)化網(wǎng)絡性能
數(shù)據(jù)庫的應用不斷增加,自然網(wǎng)絡這個承載數(shù)據(jù)庫服務器的平臺至關重要,直接影響著用戶發(fā)送數(shù)據(jù)。因此,調(diào)整網(wǎng)絡性能也是必然趨勢,而優(yōu)化網(wǎng)絡就需要盡可能降低網(wǎng)絡中數(shù)據(jù)流量,從而降低了網(wǎng)絡資源的使用。
1.7.1 Oracle 網(wǎng)絡協(xié)議
Oracle數(shù)據(jù)庫比較常用的網(wǎng)絡協(xié)議為SQL*Net或者Net 8,該協(xié)議處于七層開放式的回話層中,將透明連通性提供給Oracle服務器與客戶端。透明連通性就是通過接口層SQL*Net/Net 8接收來自Oracle應用的SQL語句。而且按照相關的標準格式打成包,同時把該包傳送至數(shù)據(jù)庫。SQL*Net/Net 8主要是用來負責構建及維護客戶和服務器間的網(wǎng)絡會話。
1.7.2 檢測網(wǎng)絡性能的方法。數(shù)據(jù)通過了網(wǎng)絡程序之后必然會出現(xiàn)延遲,因此就需要優(yōu)化其性能,才能夠有效保障網(wǎng)絡的吞吐量,才能夠降低網(wǎng)絡的流量。從使用現(xiàn)狀分析可知,要想非常精確的確定出網(wǎng)絡的延遲十分困難。但是在Oracle數(shù)據(jù)庫中設計了三個動態(tài)性能表,這些表就能夠用來測量出網(wǎng)絡延遲,這些表分別是v$session_event,v$session_wait與v$sesstat。
(1)v$session_even,該操作主要是操作時Oracle的等待時間,該值就可以多網(wǎng)絡效率進行有效評估。
(2)v$session_event;將目前正在運行的會話(等待事件)全部列出來,所謂等待事件就是說明共享或者前臺進程中正處于等待的消息。只要存在等待事件,一定要查詢等待事件是不是被Oracle接收或者被客戶端發(fā)送,而且還能夠查該表是不是意外被中止,只要客戶端發(fā)出消息就能夠確定出Oracle是否已經(jīng)作出回應或者依然在等待。
(3)通過v$sesstat查看已經(jīng)接收或者發(fā)送到客戶端的字節(jié)數(shù),還能夠查詢到客戶端傳遞過來的請求數(shù)目。
2 結(jié)束語
筆者依據(jù)自身經(jīng)驗,做了如上Oracle數(shù)據(jù)庫相關優(yōu)化探討。但是該分析屬于一項比較復雜工作,涉及到多個方面,不但要具備扎實數(shù)據(jù)庫技術,還要非常熟悉操作系統(tǒng)、硬件設備以及機器結(jié)構等各個方面。筆者全面了解了Oracle體系結(jié)構,并且探討了對該體系結(jié)構的優(yōu)化,包含了優(yōu)化I/O、優(yōu)化內(nèi)存等等,從而更確保了房產(chǎn)信息系統(tǒng)的實時監(jiān)控。
參考文獻:
[1]翟巖龍,宿紅毅,戰(zhàn)守義.數(shù)據(jù)庫性能監(jiān)控體系的研究與應用[J].計算機科學,2009(11).
[2]王娜,宿紅毅,白琳等.數(shù)據(jù)庫性能監(jiān)控分析系統(tǒng)的設計與實現(xiàn)[J].計算機工程,2010(24).
[3]滕永昌.Oracle10g數(shù)據(jù)庫管理系統(tǒng)[M].北京:機械工業(yè)出版社,2012.
[4]楊華千,劉勇國,楊德剛,廖曉峰.Oracle的存儲體系結(jié)構及其對象空間分配研究[J].計算機科學,2013(09).
作者簡介:馮育棟(1982.09-),男,江蘇靖江人,科員,本科,研究方向:信息系統(tǒng)管理維護。
作者單位:常州市房產(chǎn)登記中心,江蘇常州 213003