Ⅰ ORACLE資料庫性能優化概述
實際上 為了保證ORACLE資料庫運行在最佳的性能狀態下 在信息系統開發之前就應該考慮資料庫的優化策略 優化策略一般包括伺服器操作系統參數調整 ORACLE資料庫參數調整 網路性能調整 應用程序SQL語句分析及設計等幾個方面 其中應用程序的分析與設計是在信息系統開發之前完成的
分析評價ORACLE資料庫性能主要有資料庫吞吐量 資料庫用戶響應時間兩項指標 資料庫吞吐量是指單位時間內資料庫完成的SQL語句數目 資料庫用戶響應時間是指用戶從提交SQL語句開始到獲得結果的那一段時間 資料庫用戶響應時間又可以分為系統服務時間和用戶等待時間兩項 即
資料庫用戶響應時間=系統服務時間 + 用戶等待時間
上述公式告訴我們 獲得滿意的用戶響應時間有兩個途徑 一是減少系統服務時間 即提高資料庫的吞吐量 二是減少用戶等待時間 即減少用戶訪問同一資料庫資源的沖突率
性能優化包括如下幾個部分
ORACLE資料庫性能優化之一 調整數據結構的設計
這一部分在開發信息系統之前完成 程序員需要考慮是否使用ORACLE資料庫的分區功能 對於經常訪問的資料庫表是否需要建立索引等
ORACLE資料庫性能優化之二 調整應用程序結構設計
這一部分也是在開發信息系統之前完成 程序員在這一步需要考慮應用程序使用什麼樣的體系結構 是使用傳統的Client/Server兩層體系結構 還是使用Browser/Web/Database的三層體系結構 不同的應用程序體系結構要求的資料庫資源是不同的
ORACLE資料庫性能優化之三 調整資料庫SQL語句
應用程序的執行最終將歸結為資料庫中的SQL語句執行 因此SQL語句的執行效率最終決定了ORACLE資料庫的性能 ORACLE公司推薦使用ORACLE語句優化器(Oracle Optimizer)和行鎖管理器(row level manager)來調整優化SQL語句
ORACLE資料庫性能優化之四 調整伺服器內存分配
內存分配是在信息系統運行過程中優化配置的 資料庫管理員可以根據資料庫運行狀況調整資料庫系統全局區(SGA區)的數據緩沖區 日誌緩沖區和共享池的大小 還可以調整程序全局區(PGA區)的大小 需要注意的是 SGA區不是越大越好 SGA區過大會佔用操作系統使用的內存而引起虛擬內存的頁面交換 這樣反而會降低系統
ORACLE資料庫性能優化之五 調整硬碟I/O 這一步是在信息系統開發之前完成的
資料庫管理員可以將組成同一個表空間的數據文件放在不同的硬碟上 做到硬碟之間I/O負載均衡
ORACLE資料庫性能優化之六 調整操作系統參數
例如 運行在UNIX操作系統上的ORACLE資料庫 可以調整UNIX數據緩沖池的大小 每個進程所能使用的內存大小等參數
lishixin/Article/program/Oracle/201311/17687
Ⅱ 【基於ORACLE資料庫的SQL語句優化分析】 資料庫查詢語句的優化
【摘要】隨著資料庫應用范圍及規模的不斷擴大,資料庫的性能問題逐漸顯現,優化資料庫有助於維持系統的穩定性以及運行的高效性。本文主要依據筆者在實際工作中的精坦敏拍英,對SQL語句優化的目的、SQL語句優化技術及原則進行全面分析和闡述。
【關鍵詞】ORACLE資料庫;SQL語句;優化
1前言
隨著現代化信息技術的迅猛發展,互聯網應用的日益普及,資料庫技術的影響力越來越大。作為信息系統管理的核心,資料庫的主要操作就是查詢,資料庫的應用效率在很大程度上是由查詢速度決定的,特別是對於規模較大的資料庫而言,查詢速度十分關鍵。查詢速度在SQL語句中佔有很大比重,所以,通過對查詢語句進行優化有助於促進應用系統性能及效率的進一步提升。
2SQL語句優化分析
2.1SQL語句優化的目的
對於一個資料庫而言,在確保設計無誤的前提下,要想避免出現性能問題必須確保其擁有合理的SQL語句拿喚結構。最簡單的資料庫尋找數據路徑是對SQL語句進行調整,ORACLE資料庫性能提升的主要途徑就是對SQL語句進行適當的調整。從本質上講,SQL語句優化就是確保所使用的語句可以被優化器識別,對索引進行有效利用以便控製表掃描的I/O次數,有效防止出現表搜索。用高性能的SQL語句替代低性能的SQL語句,確定最佳的數據查找路徑,盡可能使CPU時間與I/O時間保持平衡是進行優化的主要目的。在對SQL語句進行優化的過程中,以系統需求為依據確定最有可能實現性能提升的語句並進行優化。
2.2SQL語句優化技術及原則
當數據量積累到一定程度之後,對於資料庫全表SQL語句進行一次掃描,若查詢策略較好,一般只用幾秒鍾,但如果SQL語句性能較低,就需要用幾分鍾甚至更多時間。從這點不難看出,SQL語句性能對於查詢速度具有極大的影響,所以,對於應用系統而言,不僅能滿足功能的實現,還要保證SQL語句的質量。
(1)採取適宜的索引。為達到優化查詢的目的,一項重要工作就是確定相適應的索引,並嚴格依照原則加以使用,與此同時,為有效控制I/O競爭,不可以在同一個磁碟中同時建立索引和用戶表空間。
語句1:SELECT CUS_NO, CUS_NAME FROM CUSTOMER WHERE CUS_NO NOT IN
(SELECT CUS_NO FROM SERVICE);
語句2: SELECT CUS_NO, CUS_NAME FROM CUSTOMER WHERE NOT EXISTS
(SELECT * FROM SERVICE WHERE SERVICE.CUS_NO=CUSTOMER.CUS_NO);
上述兩個語句可以達到一致的查詢結果,對二者進行對比,當執行語句1時,由於ORACLE未利用CUSTOMER 表上CUS_NO索引,所以就會掃描整表,在執行語句2的過讓羨程中,ORACLE所掃描的只是CUSTOMER 表子查詢中的聯合查詢,並且使用了CUS_NO索引,因此,在執行效率方面明顯優於前者。
(2)避免在SELECT子句中出現「*」。ORACLE在進行解析時,需要按照一定順序對「*」進行轉換,該項轉換工作的進行需要對資料庫的數據字典進行查詢,勢必需要花費較多的時間,這樣就會導致較低的效率,所以,要避免在SELECT子句中出現「*」。
(3)如果必要可以利用COMMIT提交事務。ORACLE能夠自動提交DDL語句,而諸如DML等類型的語句的提交則是通過手動方式或者回滾事務實現的。在編寫應用程序的過程中,在操作諸如insert、delete以及update 等較為復雜的語境的時候,利用COMMIT提交事務可以講會話中持有的鎖加以釋放,將存在於緩存中的未經修改的數據塊進行清除,進而將系統資源予以釋放,促進系統性能的進一步提升,因此,如果有必要,可以利用COMMIT對相關事務進行提交。
(4)聯合查詢連接順序的確定。如果查詢操作涉及到多個表,基礎表應當是交叉表,所謂交叉表具體是指被其他表引用的表。連接執行效果在很大程度上受到FROM語句中表的順序的影響,對於FROM中所包含的表,ORACLE解析器進行處理的順序是由右至左,SQL語句中所選擇的基礎表會因優化器的不同而有所區別,在使用CBO的情況下,優化器會對SQL語句中各個表的物理大小以及索引狀態進行檢查,在此基礎上確定一個花費最小的執行路徑;在使用RBO的情況下,如果全部的連接條件均有索引與之相對應,那麼,FROM子句中位置最後面的表就是基礎表。
(5)IN用EXISTS取代。在對數個基礎表查詢過程中,一般需要進行表的連接。因為利用IN的子查詢過程中,ORACLE的掃描對象是全表,因此,出於提高查詢效率目的的考慮,應當將IN用EXISTS取代。
(6)在索引列中不使用計算。當通過對函數進行引用在WHERE子句中進行計算的時候,假如索引列只是函數的一部分,優化器就會針對全表進行掃描,而不會使用索引,所以,在索引列中不能使用函數。
3結語
綜上所述,隨著現代化信息技術的迅猛發展,互聯網應用的日益普及,資料庫技術的影響力越來越大。在信息量迅速激增的形勢下,資料庫優化調整成為當前所面臨的一大關鍵性問題,特別是對規模較大的資料庫而言,及時進行優化的意義更加倍重大。對於資料庫的運行性能而言,最主要的影響因素主要體現在以下幾點:資料庫系統架構的設計是否合理,資源配置是否科學以及SQL語句編寫效率等。筆者從事的是電信企業的運營分析工作,每天都要從資料庫取各種數據,可以說是離不開資料庫,所以在實踐中,我覺得嚴格遵守SQL語句優化原則及方法,並在實踐中及時總結經驗教訓,可以實現對系統響應時間的有效控制,促進運行效率的提升。
參考文獻
[1] 許開宇,胡文驊. 如何提高ORACLE資料庫應用程序的性能[J]. 計算機應用與軟體. 2002(10)
[2] 鄭耀,吳建嵐. 基於Oracle資料庫的語句優化策略[J]. 信息與電腦(理論版). 2011(07)
[3] 高攀,施蔚然. 基於Oracle資料庫的SQL語句優化[J]. 電腦編程技巧與維護. 2010(22)
[4] 鍾小權,葉猛. Oracle資料庫的SQL語句優化[J]. 計算機與現代化. 2011(03)
作者簡介:
王勇軍,男,(1981.1-),吉林通化人,就職於中國聯合網路通信有限公司長春市分公司,通信工程師,本科,研究方向:SQL使用
(作者單位:中國聯合網路通信有限公司長春市分公司)