羅雨
遼寧錦州渤海大學信息科學與技術學院
Oracle數(shù)據(jù)庫查詢優(yōu)化方法研究
羅雨
遼寧錦州渤海大學信息科學與技術學院
現(xiàn)今,Oracle數(shù)據(jù)庫在很多的領域中都得到了廣泛的應用,并且在目前數(shù)據(jù)庫市場以及企事業(yè)信息化系統(tǒng)的起到了重大的作用。在許多的信息化系統(tǒng)中首先選擇的產品是Oracle數(shù)據(jù)庫。隨著因特網的飛速發(fā)展,很多的信息的形式以電子化和數(shù)字化出現(xiàn),而且這些信息的存儲通常采用的是Oracle數(shù)據(jù)庫。在現(xiàn)實的許多應用系統(tǒng)中,數(shù)據(jù)查詢的速度效率如何都直接對用戶評價系統(tǒng)有著重要的影響。
Oracle 數(shù)據(jù)庫 優(yōu)化
1.1 SQL查詢語句的執(zhí)行過程
在Oracle中SQL語句的執(zhí)行是自動的,大部分的用戶不會關注每一個階段的具體執(zhí)行細節(jié)。然而,充分地了解到執(zhí)行的每一個階段可以有利于提高找到低性能的SQL語句的效率,并且可以增強書寫高效SQL語句的效率,從而讓問題得到解決。每一個SQL語句所包括的有分析語法、執(zhí)行語句以及數(shù)據(jù)讀取等。
1.2 Oracle查詢優(yōu)化器
作為非過程化的語言,在SQL語句的執(zhí)行中用戶輸入取數(shù)據(jù)的指令,關于取數(shù)據(jù)的方式包括了索引取數(shù)據(jù)以及全表掃描取數(shù)據(jù),而這些都是數(shù)據(jù)庫內部的優(yōu)化器決定的。Oracle優(yōu)化器的目的主要是為了訪問SQL數(shù)據(jù)的有效路徑,這樣能夠大大地降低語句執(zhí)行過程中的花費的開銷。在Oracle發(fā)展中,優(yōu)化器主要包括了兩類,分別是基于成本以及基于規(guī)則的優(yōu)化器。這兩者的最大區(qū)別就是代價的衡量方法不一樣。
1.2.1 基于成本優(yōu)化器
基于成本的優(yōu)化方法指的是選擇一個集成數(shù)據(jù)庫內核里面的成本估算器從而估算出在整個執(zhí)行計劃中所有需要投入的資金成本,其中成本的大小主要是取決于SQL語句執(zhí)行所用的資源以及SQL語句執(zhí)行所采取的時間。通過查詢優(yōu)化器從而將成本花銷最小的執(zhí)行計劃選出來。采用基于成本優(yōu)化器,基礎數(shù)據(jù)是選擇的分析數(shù)據(jù)是帶著表以及索引,這些分析數(shù)據(jù)的采集所用到的命令是ANALYZE。關于Oracle 9i,當統(tǒng)計數(shù)據(jù)不存在的時候,就用到缺省值,從而會造成在選擇優(yōu)化器方面的錯誤執(zhí)行計劃,這樣會給SQL語句查詢的性能帶來負面的影響。在OraclelOg之后,數(shù)據(jù)的分析就逐漸演變?yōu)樽詣訑?shù)據(jù),這樣會大大地減輕DBA的負荷,然而在一些特定的環(huán)境下,可能要采取相關的手工分析。隨著Oracle數(shù)據(jù)庫的不斷發(fā)展,Oracle的版本也逐漸的更新,基于成本優(yōu)化器的發(fā)展也得到了很大的提高。
2.1 Oracle數(shù)據(jù)庫體系結構
Oracle數(shù)據(jù)庫的體系結構的與數(shù)據(jù)查詢性能以及查詢速度有著很大的聯(lián)系。Oracle9i數(shù)據(jù)庫的相關服務器給予了良好的信息管理的氛圍,而且該信息管理能夠將很多的數(shù)據(jù)存儲起來,同時還能夠滿足用戶快速訪問這些數(shù)據(jù)的需求。Oracle9i數(shù)據(jù)庫的組成包括考慮Oracle數(shù)據(jù)庫物理文件與Oracle實例。Oracle的體系結構與Oracle數(shù)據(jù)庫性能有著直接的聯(lián)系,能夠對數(shù)據(jù)的查詢性進行改善與調整?;谠撈脚_上能夠在一定程度上增強數(shù)據(jù)庫語句的查詢速率。
Oracle物理文件中所包括的內容有初始化參數(shù)文件、日志文件、以及控制文件和數(shù)據(jù)文件等。數(shù)據(jù)文件的作用是存放具全部的數(shù)據(jù)信息。數(shù)據(jù)文件和表空間是一一對應的關系,而且每個表空間和數(shù)據(jù)文件是一對多的對應關系。重做日志文件中主要記錄的是所有數(shù)據(jù)的變化情況,而且這些數(shù)據(jù)是按照一定的順序保存的,一般情況下重做日志文件的保存和數(shù)據(jù)文件的保存所放置的地方是不一樣的。當系統(tǒng)出現(xiàn)了意外的故障時候,日志文件恢復數(shù)據(jù)庫的事務是按照正確的順序進行的。為了增強可靠性,Oracle9i中的重做日志文件要達到兩個以上才可以正常運行,當服務器運行的模式是處于歸檔日志情況下,那么通過歸檔在歸檔日志文件中寫入日志,從而很大程度上確保了數(shù)據(jù)庫是在安全的模式下運作。Oracle9i在整個數(shù)據(jù)庫的構建中同時也能夠構建控制文件,這里的控制文件內部中具體的內容主要有數(shù)據(jù)的名稱附帶著重做日志文件全部的路徑名和全部的數(shù)據(jù)庫文件。這對于數(shù)據(jù)庫中控制文件有意義非凡的影響。
數(shù)據(jù)庫性能的瓶頸是磁盤I/O,如果能夠將瓶頸問題解決的話,就能夠在一定程度上提高性能。配置數(shù)據(jù)庫的重要性能準則就是要盡可能地將磁盤I/O減少,并且使得多個磁盤驅動器之間的負荷進行平衡,而且盡可能采用本地管理表空間。此外在Oracle數(shù)據(jù)的性能提高過程中,如果Oracle的體系結構可以得到很大地簡化,可以使得數(shù)據(jù)庫的空間得到改善。按照安裝選項選擇,Oracle軟件在安裝的時候能夠自動地構建出標準的Oracle的體系結構。配置數(shù)據(jù)庫的時候,數(shù)據(jù)庫管理員正確地布局數(shù)據(jù)庫的物理文件以及相應的邏輯對象。
3.1 Oracle數(shù)據(jù)庫物理文件
Oracle實例中的進程充當著重要的作用,Oracle實例可以確保交換Oracle實例和物理文件,從而保證整個系統(tǒng)可以成功運行。后臺進程的作用是維護與實現(xiàn)數(shù)據(jù)庫的物理結構以及存儲結構兩者的關系。Oracle實例的數(shù)量和數(shù)據(jù)庫的配置有著直接的關系。數(shù)據(jù)庫管理Oracle實例中,所做的系統(tǒng)管理工作比較少。數(shù)據(jù)庫的警告日志常記錄的是對后臺進程有著重要影響的問題。
3.2 網絡環(huán)境
Oracle9i的網絡產品是OracleNet,通過TNS,Net的作用是連接服務器和客戶機。OracleNet協(xié)議適配器所進行的操作是把普通的網絡操作進行特定協(xié)議的轉換,采用第三方或者系統(tǒng)所提供的網絡軟硬件能夠將數(shù)據(jù)傳輸在兩臺計算機之間。OracleNet連接機制可以分為以下步驟進行:
OracleNet的特點是透明性的網絡、透明的位置、獨立的協(xié)議等。許多的數(shù)據(jù)庫應用程序使用場合通常是網絡環(huán)境。而且網絡性能的是否好和數(shù)據(jù)查詢的速度有著重要的聯(lián)系。網絡最大目標的調整主要是利用數(shù)據(jù)庫自身局部的功能進而帶來網絡的數(shù)據(jù)流量減少,進而減少依賴網絡,防止數(shù)據(jù)性能問題的產生。
4.1 系統(tǒng)優(yōu)化措施
如果索引構造是足夠合理,那么這在一定程度上使得數(shù)據(jù)庫查詢速度得到提高。也使得滿足請求的物理讀取總數(shù)得到減少。一般情況下,讀取索引塊能夠對索引表中的數(shù)據(jù)的行與塊進行直接地讀取,相比于整個表的讀取更加地高效。
4.1.1 Oracle的主要索引類型
Oracle中用的比較多的索引就是B樹索引。該索引存在的形式是樹型存儲。根節(jié)點是索引的基礎,根節(jié)點中的信息有其他的指針,這些指針指向的是索引中下一層。而且該索引的下一層的組成是分枝節(jié)點,葉子節(jié)點是分枝節(jié)點中的最后一個,葉子節(jié)點的索引項中存儲的信息有列值的行所相應的ROWID。連接葉子節(jié)點和葉子節(jié)點的左右葉子節(jié)點,從而在索引的前后進行范圍的搜索。當更改索引列中的數(shù)據(jù)時候,維護B樹索引實現(xiàn)起來比較容易,而且效率很快,該B樹索在聯(lián)機事務的應用處理方面有很大的影響。B樹索引根據(jù)不同的事務進行對應的處理,從而增強SQL語句中查詢的性能。
4.2 系統(tǒng)的I/O效率提高
磁盤I/O是影響數(shù)據(jù)庫性能的重大因素,而且也對數(shù)據(jù)查詢速率造成一定的影響。所以.在規(guī)劃物理文件的時候,一般情況下會選擇對數(shù)據(jù)查詢性能有所提高的方法,比如在獨立的磁盤中存儲訪問量大的數(shù)據(jù),并且對于在同一個表空間中對數(shù)據(jù)文件進行分類處理,分別放置在不一樣的磁盤上,從而給索引建立出獨自的表空間,進而防止由于日志切換過于頻繁,建立用于排序使用的臨時表空間。能夠按照具體的情況從而分析找出數(shù)據(jù)查詢的瓶頸,選擇合理的方法進而將數(shù)據(jù)的查詢性能提高。運行數(shù)據(jù)庫系統(tǒng)中,會出現(xiàn)許多的變化因素,例如增大數(shù)據(jù)文件,與索引,而且也可能改變數(shù)據(jù)庫的結構。所以,針對表空間以及布局數(shù)據(jù)文件需要制定出更加有效的計劃。
4.3 全表掃描調整
數(shù)據(jù)查詢通常用到了全表掃描,當處理不恰當?shù)臅r候,全表掃描就會導致數(shù)據(jù)讀取太多,從而出現(xiàn)I/O。首先調整全表掃描,能夠通過SQL的修改,其次我們也能夠根據(jù)索引的建立、參數(shù)初始化的修改等實現(xiàn)。
4.4 分析統(tǒng)計表
Oracle數(shù)據(jù)庫在SQL語句執(zhí)行方案的選擇中,需要根據(jù)數(shù)據(jù)字典中的各種對象信息的統(tǒng)計的存儲,通過優(yōu)化器從而選擇最優(yōu)的方案,需要考慮到信息的統(tǒng)計。所以常統(tǒng)計收集工作,進一步地提高查詢的相關速度。統(tǒng)計分析方法能夠選擇analyze命令,另外也能夠運用DBMS STATS包。
4.5 使用DBMS STATS包
通常analyze命令是一次處理一個表或者一個索引,當收集的表有多個的時候,索引以至于統(tǒng)計分析工作區(qū)中的數(shù)據(jù)信息,就需要用到DBMS-STATS代碼包。而且在使用DBMS STATS之前,就需要先用sysdba的方式成功進入到數(shù)據(jù)庫中,運行bmsstat.Sql以及prvtstat.plb腳本,腳本中包括了數(shù)據(jù)庫在執(zhí)行過程中的定義以及申明。
結語:軟件供應商紛紛在軟硬件平臺投資了很多的資金成本,目的是增強查詢數(shù)據(jù)的速率。本文主要是基于Oracle數(shù)據(jù)庫進行查詢的優(yōu)化。本文完成了數(shù)據(jù)查詢語句的整個過程,接著根據(jù)Oracle數(shù)據(jù)庫的特征,從數(shù)據(jù)的優(yōu)化目的出發(fā),重點研究了Oracle實例以及Oracle物理文件對SQL語句的查詢速率的影響。本文主要分析了影響Oracle數(shù)據(jù)庫的性能因素,從多個因素方面出發(fā)研究數(shù)據(jù)庫的查詢優(yōu)化,并且對數(shù)據(jù)庫的環(huán)境應用也進行了研究。
[1] 楊小艷, 尹明, 戴學豐. Oracle數(shù)據(jù)庫查詢優(yōu)化方法研究[J]. 計算機與現(xiàn)代化, 2008(4):4-7
[2] 張輝, 趙郁亮, 徐江,等. 基于Oracle數(shù)據(jù)庫海量數(shù)據(jù)的查詢優(yōu)化研究[J]. 計算機技術與發(fā)展, 2012, 22(2):165-167
[3] 張學義, 王觀玉, 黃雋. 基于Oralce數(shù)據(jù)庫SQL查詢優(yōu)化研究[J]. 制造業(yè)自動化, 2011, 33(2):116-118
[4] 彭建明, 生本有. ORACLE數(shù)據(jù)庫性能優(yōu)化的方法研究[J].醫(yī)學信息:醫(yī)學與計算機應用, 2004, 17(8):485-486