基于RCLE的查詢優(yōu)化_第1頁
基于RCLE的查詢優(yōu)化_第2頁
基于RCLE的查詢優(yōu)化_第3頁
基于RCLE的查詢優(yōu)化_第4頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于ORACLE的查詢優(yōu)化、DBMS查詢規(guī)則查詢優(yōu)化是在查詢執(zhí)行引擎生成一個執(zhí)行策略的過程中,盡量使查詢的總開銷和總時間達(dá)到最小任何關(guān)系數(shù)據(jù)庫都有一套解決查詢的規(guī)則, 而各種關(guān)系數(shù)據(jù)庫查詢的過程稍有所區(qū)別,但是基本的操作思想和過程是一致的。DBMS的查詢規(guī)則一般分為基本SQL查詢 語句相關(guān)數(shù)據(jù)的統(tǒng)計信息以下幾個過程:語法分析與翻譯處理;查詢優(yōu)化處理;執(zhí)行語法分卄析與 翻 譯圖1DBMS查詢規(guī)則圖1語法分析與翻譯處理查詢處理開始之前,系統(tǒng)必須在擴展關(guān)系代數(shù)的基礎(chǔ)上將查詢語句翻譯成可 使用的形式,為此這一階段完成兩個主要的功能: 一是檢查查詢語句語法的正確 性;二是把查詢語句分析成關(guān)系數(shù)據(jù)庫能夠理

2、解的各個組成部分,構(gòu)造該查詢的語法分析樹,并將其翻譯成關(guān)系代數(shù)表達(dá)式。2.查詢優(yōu)化處理查詢優(yōu)化是為查詢選擇最有效的查詢執(zhí)行計劃的過程。 查詢優(yōu)化一方面在關(guān) 系代數(shù)級進(jìn)行優(yōu)化, 要做的是力圖找出與給定表達(dá)式等價且執(zhí)行效率最高的一個 表達(dá)式。為了在諸多查詢執(zhí)行計劃中做出選擇, 優(yōu)化器必須估計每個查詢執(zhí)行計 劃的代價。 在沒有真正執(zhí)行查詢計劃之前, 準(zhǔn)確計算出查詢計劃的代價通常是不 可能的。因此,優(yōu)化器要利用各關(guān)系的統(tǒng)計信息,來對計劃做出最佳估計。 3.執(zhí)行執(zhí)行就是將優(yōu)化器所選擇的執(zhí)行計劃執(zhí)行, 執(zhí)行引擎從相應(yīng)的數(shù)據(jù)庫文件中 篩選數(shù)據(jù),將結(jié)果輸出。優(yōu)化器在選取優(yōu)化規(guī)則時,大多數(shù) DBMS( 如 OR

3、ACLE 、 SYBASE、 SQLSERVER 等 )都是采用基于代價的優(yōu)化方法,優(yōu)化器從數(shù)據(jù)字典中獲取許多 統(tǒng)計信息, 根據(jù)不同的算法估計出不同查詢規(guī)劃的代價, 然后選擇一個較優(yōu)的規(guī) 劃。對于 ORACLE ,在 ORACLE7 之前,主要是使 用基于規(guī)則的優(yōu)化器RULEBASEDOPTIMIZATION(簡稱 RBO)。從 ORACLE8 開始,ORACLE 把一 個代價引擎(COSTENGINE)集成到數(shù)據(jù)庫內(nèi)核中,用來估計每個執(zhí)行計劃需要的 代價,該代價將每個執(zhí)行計劃所耗費的資源進(jìn)行量化,從而 CBO 可以根據(jù)這個 代 價 選 擇 出 最 優(yōu) 的 執(zhí) 行 計 劃 , 即 基 于 代

4、價 的 優(yōu) 化 器 COSTBASEDOPTIMIZATION( 簡稱 CBO)。要注意的是:雖然 CBO 的功能隨著 ORACLE 新版本的推出,功能越來越強, 但它不是能包治百病的神藥,否則就不再需要 DBA 了。由于一系列因素都會影響語句的執(zhí)行, 優(yōu)化器綜合權(quán)衡各個因素, 在眾多的 執(zhí)行計劃中選擇認(rèn)為是最佳的執(zhí)行計劃。 然而,應(yīng)用設(shè)計人員通常比優(yōu)化器更知 道關(guān)于特定應(yīng)用的數(shù)據(jù)特點。 無論優(yōu)化器多么智能, 在某些情況下開發(fā)人員能選 擇出比優(yōu)化器選擇的最優(yōu)執(zhí)行計劃還要好的執(zhí)行計劃, 這是需要人工干預(yù)數(shù)據(jù)庫 優(yōu)化的主要原因。事實表明,在某些情況下,確實需要 DBA 對某些語句進(jìn)行手 工優(yōu)化。二

5、 SQL 語句優(yōu)化步驟數(shù)據(jù)庫系統(tǒng)的生命周期可分為設(shè)計、 開發(fā)和成品三個階段。 在這三個階段都 可以提高查詢速度。由于設(shè)計階段進(jìn)行數(shù)據(jù)庫性能優(yōu)化的成本最低,收益最大, 因此在設(shè)計階段就應(yīng)該選擇合理的數(shù)據(jù)庫設(shè)計方法。 而在數(shù)據(jù)庫系統(tǒng)的開發(fā)和成 品階段則需對應(yīng)用程序進(jìn)行優(yōu)化:通常應(yīng)用程序可分為兩個方面源代碼和 SQL 語句。源代碼的優(yōu)化由于涉及程序邏輯的改變,因此優(yōu)化源代碼要在時間 成本和風(fēng)險成本上投入較高代價,因此對 SQL 語句的優(yōu)化尤為重要 3 。調(diào)整現(xiàn)有應(yīng)用程序中 SQL 語句的最好方法是采取下列步驟 4:1. 熟悉應(yīng)用程序。管理員不僅需要熟悉特定的SQL 語句,還需要熟悉應(yīng)用程序的功能和所

6、做的操作。2使用SQLTRACE工具分析特定SQL語句執(zhí)行的操作,所使用的RDBMS的功 能和應(yīng)用程序?qū)@些功能的使用情況。3.在SQLTRACE中使用EXPLAINPLAN命令分析優(yōu)化器執(zhí)行這些SQL語句的方 式。下面具體的介紹一下三個步驟:1.熟悉應(yīng)用程序管理員不僅需要了解 SQL 語句,還需要了解這些 SQL 語句的執(zhí)行效果。首 先,需要將不同的 SQL 語句形成表格并確定每條 SQL 語句對數(shù)據(jù)庫中每個表的 訪問次數(shù)。這個表以可視化方式告訴管理員用戶對數(shù)據(jù)庫中哪些表的訪問最為頻 繁。這個表為管理員確定哪些 SQL 語句影響了哪些表提供了一個很好的快速參 考。管理員還可進(jìn)一步深化這種方法

7、, 并將該表中的 SQL 語句分成不問的類型, 比女口 SELECT語句、INSERT語句、UPDATE語句和DELETE語句等等。如果應(yīng) 用程序是在脫離實際應(yīng)用背景的情況下開發(fā)的,那么這種方法可能是不現(xiàn)實的。2. 使用 SQLTRACE 分析 SQL 語句通過在 SQL 語句上執(zhí)行 SQLTRACE 工具,管理員可收集到與所有 SQL 語 句執(zhí)行操作有關(guān)的大量極具價值的信息。 SQLTRACE 提供了如下一些非常有價 值的信息:(1)解析、執(zhí)行和返回數(shù)據(jù)的次數(shù)(2)CPU 時間和執(zhí)行時間(3)物理讀和邏輯讀操作次數(shù)(4)處理的記錄數(shù)量(5)庫緩沖區(qū)錯誤次數(shù)管理員可用這些信息確定哪些 SQL語句效率較高,哪E些SQL語句效率較低。 這些信息可能會為管理員指出調(diào)整 SQL 語句的方向。為提高效率,可能不得不 修改這些 SQL 語句。通過使用 EXPLAINPLAN 命令,管理員可能會發(fā)現(xiàn)從其他 方面提高 SQL 語句效率的方法。3. 使用 EXPLAINPLAN 命令分析 SQL 語句通過將EXPLAINPLAN命令的執(zhí)行結(jié)果作為SQLTRACE報表的一部分,管 理員可獲得關(guān)于 ORACLE 如何執(zhí)行 SQL 語句的更為詳細(xì)的信息。通過EXPLAINPLAN 命令獲得的信息 (以及通過 SQLTRACE 獲得的信息 )能幫助管理 員判斷 SQL 語句的執(zhí)行效率。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論