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