齊斌 弋才勇
摘 要 Oracle 數(shù)據(jù)庫(kù)是目前電力信息系統(tǒng)應(yīng)用在為廣泛的大型關(guān)系型數(shù)據(jù)庫(kù)之一,成幾何級(jí)數(shù)增長(zhǎng)的數(shù)據(jù)可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)性能的下降,本文從SQL語句的優(yōu)化、內(nèi)存的調(diào)整、磁盤I/O的調(diào)整三方面闡述數(shù)據(jù)庫(kù)優(yōu)化方案,針對(duì)電力大型業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)優(yōu)化方案的綜合應(yīng)用,可以保證系統(tǒng)的高效運(yùn)行。
【關(guān)鍵詞】ORACLE 優(yōu)化 SQL 內(nèi)存
Oracle數(shù)據(jù)庫(kù)是目前電力信息系統(tǒng)應(yīng)用最廣泛的大型關(guān)系型數(shù)據(jù)庫(kù),在實(shí)際應(yīng)用中,隨著數(shù)據(jù)庫(kù)數(shù)據(jù)量的增大,訪問量的增大,數(shù)據(jù)庫(kù)系統(tǒng)性能將會(huì)下降,嚴(yán)重影響相關(guān)業(yè)務(wù)專責(zé)對(duì)信息系統(tǒng)的使用效率,對(duì)Oracle數(shù)據(jù)庫(kù)進(jìn)行性能調(diào)整,成為保障其高效運(yùn)行的基礎(chǔ)。
1 SQL語句的優(yōu)化
SQL語句的執(zhí)行效率是影響Oracle數(shù)據(jù)庫(kù)執(zhí)行效率的一個(gè)重要因素,通過對(duì)SQL語句的優(yōu)化調(diào)整,能很好地提高數(shù)據(jù)庫(kù)系統(tǒng)性能。
1.1 選擇合適的聯(lián)合次序
當(dāng)SQL語句包含多個(gè)表聯(lián)結(jié)時(shí),表的聯(lián)結(jié)次序是非常重要的。在聯(lián)結(jié)中,驅(qū)動(dòng)表示緊跟在WHERE子句后面的第一個(gè)表,該表包含能夠去除大多數(shù)行的過濾器,選擇的聯(lián)結(jié)次序應(yīng)該讓最少數(shù)目的行參加到與其他表的聯(lián)結(jié)中。
1.2 有效的WHERE子句
WHERE子句中的選擇性條件可以顯著減少SQL語句在一個(gè)查詢周期內(nèi)得到的數(shù)據(jù)量,所以在構(gòu)建WHERE子句時(shí),遵循一些原則可以提高語句的執(zhí)行效率:
1.2.1 盡可能少的使用通配符
如果在WHERE子句中有通配符,則需要對(duì)整個(gè)數(shù)據(jù)列進(jìn)行模式匹配來檢索數(shù)據(jù),即數(shù)據(jù)庫(kù)只能跳過索引并進(jìn)行一次全表掃描。
1.2.2 使用WHERE語句代替HAVE語句
WHERE子句在一開始就限制了被檢索的行數(shù),而HAVE子句則需要檢索比需要的還要多的數(shù)據(jù),會(huì)加重求和和排序的負(fù)擔(dān)。
1.2.3 執(zhí)行有效的子查詢
如果子查詢有選擇的WHERE子句,最好使用“IN子句”;如果父查詢中包括選擇性的WHERE子句,最好使用“EXISTS子句”。
1.3 高效的索引策略
索引是對(duì)一個(gè)表遍歷的快速方法,它只需要查找必要的數(shù)據(jù)行,而不需要進(jìn)行全表掃描。如果在一個(gè)表中強(qiáng)調(diào)行的唯一性,則可以對(duì)這個(gè)表使用主索引,作為主索引的列必須是非空的和唯一的。除了主索引外,還可以定義幾個(gè)次索引,附加的次索引將會(huì)增強(qiáng)SQL語句的查詢性能。
2 Oracle內(nèi)存調(diào)整
2.1 共享池的調(diào)整優(yōu)化
共享池主要由庫(kù)告訴緩沖和數(shù)據(jù)字典告訴緩存兩個(gè)區(qū)域組成。庫(kù)高速緩存用于保存SQL和PL/SQL代碼及其分析、執(zhí)行計(jì)劃等信息,Oracle處理SQL語句時(shí),會(huì)創(chuàng)建分析樹,對(duì)其進(jìn)行句法和語義的分析,并檢查對(duì)象權(quán)限;然后對(duì)SQL進(jìn)行優(yōu)化,生成執(zhí)行計(jì)劃。分析樹和執(zhí)行計(jì)劃將在語句第一次執(zhí)行前存儲(chǔ)在庫(kù)高速緩存中,將來處理相同語句時(shí),僅需要在庫(kù)高速緩存中找到相應(yīng)的語句分析樹和執(zhí)行計(jì)劃,直接執(zhí)行語句即可,提高了系統(tǒng)的響應(yīng)速度。數(shù)據(jù)字典高速緩存主要用于保存數(shù)據(jù)庫(kù)對(duì)象信息及用戶權(quán)限等信息。共享池大小是否合適,主要體現(xiàn)在庫(kù)緩沖區(qū)和數(shù)據(jù)字典告訴緩沖區(qū)的命中率上,庫(kù)緩存命中率應(yīng)該高于99%,而數(shù)據(jù)字段緩存命中率應(yīng)達(dá)到95%~99%,為了提高命中率,需要增加實(shí)例的共享池尺寸。
2.2 緩沖區(qū)高速緩存的調(diào)整優(yōu)化
在用戶首次請(qǐng)求數(shù)據(jù)時(shí),Oracle從磁盤讀取數(shù)據(jù)并存放于緩存區(qū)高速緩存中,然后再?gòu)臄?shù)據(jù)緩沖區(qū)中將數(shù)據(jù)返回給用戶。當(dāng)用戶再次請(qǐng)求時(shí),如果數(shù)據(jù)在數(shù)據(jù)緩沖區(qū)中,則從其中將數(shù)據(jù)直接返回給用戶,降低了查詢時(shí)間。在數(shù)據(jù)庫(kù)運(yùn)行中,保證在緩沖區(qū)中存有盡量多的用戶請(qǐng)求的數(shù)據(jù),減少?gòu)拇疟P讀取數(shù)據(jù)的次數(shù),可以大大提高數(shù)據(jù)的操作性能。緩沖區(qū)告訴緩存越大,磁盤的I/O就越少,系統(tǒng)的性能就越好。數(shù)據(jù)庫(kù)緩沖區(qū)大小是否合適,主要體現(xiàn)在數(shù)據(jù)緩沖區(qū)命中率上,數(shù)據(jù)命中率應(yīng)在90%以上,否則就需要分配更多的數(shù)據(jù)緩沖區(qū)。
2.3 PGA內(nèi)存的調(diào)整優(yōu)化
PGA是Oracle在啟動(dòng)一個(gè)服務(wù)器進(jìn)程時(shí)創(chuàng)建的非共享內(nèi)存區(qū),他主要用于內(nèi)存密集型任務(wù),比如GROUP BY,ORDER BY及散列聯(lián)結(jié)等。通過調(diào)整PGA_AGGREGATE_TARGET參數(shù),設(shè)置內(nèi)存限額,來控制數(shù)據(jù)庫(kù)中排序和散列操作的效果。如果PGA_AGGREGATE_TARGET參數(shù)過低,可供排序等操作的內(nèi)存過小,排序數(shù)據(jù)將在臨時(shí)表空間中進(jìn)行,此時(shí)就需要對(duì)磁盤進(jìn)行I/O操作,數(shù)據(jù)庫(kù)的響應(yīng)時(shí)間將會(huì)延長(zhǎng)。因此,如果需要執(zhí)行高效的排序或散列操作,該參數(shù)需要設(shè)置為較高水平。PGA_AGGREGATE_TARGET參數(shù)的一個(gè)重要指標(biāo)是PGA的命中率,通常情況效,改數(shù)值應(yīng)該高于95%,即保證絕大多數(shù)的排序操作在內(nèi)存中進(jìn)行。
3 磁盤I/O的調(diào)整
磁盤的I/O速度對(duì)整個(gè)Oracle數(shù)據(jù)庫(kù)的性能有深刻的影響,如果系統(tǒng)中存在嚴(yán)重的I/O競(jìng)爭(zhēng),就需要對(duì)磁盤I/O進(jìn)行有效的調(diào)整優(yōu)化:
(1)分散數(shù)據(jù)庫(kù)文件和重做日志文件,避免他們之間的磁盤競(jìng)爭(zhēng),還可以達(dá)到均衡磁盤負(fù)載的目的。
(2)使用Oracle分區(qū)技術(shù)將較大的表數(shù)據(jù)分散到不同的數(shù)據(jù)文件中。良好的分區(qū)可以講數(shù)據(jù)傳輸對(duì)磁盤I/O競(jìng)爭(zhēng)均勻地分散開,避免了查詢時(shí)的全表掃描,提高系統(tǒng)的I/O性能。
(3)索引的優(yōu)化設(shè)計(jì)。利用索引行記錄定位,減少磁盤的I/O,從而達(dá)到加快數(shù)據(jù)庫(kù)訪問速度,提高系統(tǒng)性能的目的
4 結(jié)論
在日常應(yīng)用中,數(shù)據(jù)庫(kù)的性能變差往往是幾個(gè)問題共同作用導(dǎo)致的,需要數(shù)據(jù)庫(kù)管理員根據(jù)實(shí)際情況,全面分析以上提到的各個(gè)方面,對(duì)各種優(yōu)化手段綜合應(yīng)用,才能對(duì)Oracle數(shù)據(jù)庫(kù)進(jìn)行有效調(diào)整,從根本上提高數(shù)據(jù)庫(kù)的使用效率,獲得系統(tǒng)的最優(yōu)性能。
作者單位
新疆信息產(chǎn)業(yè)有限責(zé)任公司 新疆維吾爾族自治區(qū)烏魯木齊市 830002endprint