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