自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle數(shù)據(jù)庫厲行計(jì)劃詳解

數(shù)據(jù)庫 Oracle
本文我們主要介紹了Oracle數(shù)據(jù)庫厲行計(jì)劃的相關(guān)知識(shí),包括厲行計(jì)劃的概念、厲行計(jì)劃的應(yīng)用實(shí)例、Oracle優(yōu)化器形式以及厲行計(jì)劃對(duì)我們的用途等,希望能夠?qū)δ兴鶐椭?/div>

Oracle數(shù)據(jù)庫厲行計(jì)劃的相關(guān)知識(shí)是本文我們主要要介紹的內(nèi)容,我們首先介紹了厲行計(jì)劃的概念,然后給出了兩個(gè)厲行計(jì)劃的實(shí)例進(jìn)行說明,***介紹了Oracle優(yōu)化器的形式以及厲行計(jì)劃對(duì)我們的用途,接下來就讓我們一起來了解一下這部分內(nèi)容。

什么是厲行計(jì)劃

所謂厲行計(jì)劃,望文生義,即便對(duì)一個(gè)查詢?nèi)蝿?wù),做出一份怎樣去告終任務(wù)的翔實(shí)計(jì)劃。舉個(gè)生存中的例子,我從珠海要去英國,我能夠抉擇先去香港然后起色,也能夠先去北京起色,可能去廣州也能夠。然而究竟怎樣去英國劃算,也即便我的開支起碼,這是一件劃算考究的事情。同樣對(duì)于查詢而言,我們提交的SQL僅僅是描寫出了我們的目標(biāo)地是英國,但至于怎么去,等閑我們的SQL中是未曾給出提醒消息的,是由數(shù)據(jù)庫來定奪的。

我們先容易的看一個(gè)厲行計(jì)劃的比擬:SQL> set autotrace traceonly

厲行計(jì)劃一:

 

  1. SQL> select count(*) from t;  
  2. COUNT(*)  
  3. ----------  
  4. 24815  
  5. Execution Plan  
  6. 0   SELECT STATEMENT Optimizer=CHOOSE 
  7. 1  0  SORT (AGGREGATE)  
  8. 2  1   TABLE Access (FULL) OF 'T' 

 

厲行計(jì)劃二:

 

  1. SQL> select count(*) from t;  
  2. COUNT(*)  
  3. 24815  
  4. Execution Plan  
  5. 0   SELECT STATEMENT Optimizer=CHOOSE (Cost=26 Card=1)  
  6. 1  0  SORT (AGGREGATE)  
  7. 2  1   INDEX (FULL SCAN) OF 'T_INDEX' (NON-UNIQUE)(Cost=26 Card=28180

 

這兩個(gè)厲行計(jì)劃中,***個(gè)表示求和是穿越舉行全表掃描來做的,把全副表中數(shù)據(jù)讀入內(nèi)存來逐條累加;第二個(gè)表示依據(jù)表中索引,把全副索引讀進(jìn)內(nèi)存來逐條累加,而無須去讀表中的數(shù)據(jù)。然而這兩種措施究竟哪種快呢?等閑來說可能二比一快,但也不是絕對(duì)的。這是一個(gè)很容易的例子演示厲行計(jì)劃的差異。對(duì)于混雜的SQL(表連接、嵌套子查詢等),厲行計(jì)劃可能幾十種甚至上百種,然而究竟那種良好呢?我們事前并不懂得,數(shù)據(jù)庫本身也不懂得,然而數(shù)據(jù)庫會(huì)依據(jù)定然的法定可能普查消息(statistics)去抉擇一個(gè)厲行計(jì)劃,等閑來說抉擇的是比擬優(yōu)的,但也有抉擇失手的時(shí)候,這即便這次談?wù)摰膬r(jià)值所在。

Oracle優(yōu)化器形式

Oracle優(yōu)化器有兩大類,基于法定的和基于代價(jià)的,在SQLPLUS中我們能夠察看init文件中定義的缺省的優(yōu)化器形式。

 

  1. SQL> show parameters optimizer_mode  
  2. NAME                 TYPE  VALUE  
  3. optimizer_mode           string  CHOOSE  
  4. SQL> 

 

這是Oracle8.1.7 企業(yè)版,我們能夠看出,默認(rèn)安裝后數(shù)據(jù)庫優(yōu)化器形式為CHOOSE,我們還能夠設(shè)置為 RULE、FIRST_ROWS,ALL_ROWS。能夠在init文件中對(duì)全副instance的所有會(huì)話設(shè)置,也能夠獨(dú)自對(duì)某個(gè)會(huì)話設(shè)置:

 

  1. SQL> ALTER SESSION SET optimizer_mode = RULE;  
  2. 會(huì)話已改動(dòng)。  
  3. SQL> ALTER SESSION SET optimizer_mode = FIRST_ROWS;  
  4. 會(huì)話已改動(dòng)。  
  5. SQL> ALTER SESSION SET optimizer_mode = ALL_ROWS;  
  6. 會(huì)話已改動(dòng)。 

 

基于法定的查詢,數(shù)據(jù)庫依據(jù)表和索引等定義消息,按照定然的法定來發(fā)生厲行計(jì)劃;基于代價(jià)的查詢,數(shù)據(jù)庫依據(jù)搜集的表和索引的數(shù)據(jù)的普查消息(穿越analyze 號(hào)召可能利用dbms_stats包來搜集)歸納來定奪撥取一個(gè)數(shù)據(jù)庫感受***的厲行計(jì)劃(切實(shí)上無須定***)。RULE是基于法定的,CHOOSE表示萬一查詢的表存在搜集的普查消息則基于代價(jià)來厲行(在CHOOSE形式下Oracle批準(zhǔn)的是 FIRST_ROWS),否則基于法定來厲行。在基于代價(jià)的兩種措施中,F(xiàn)IRST_ROWS指厲行計(jì)劃批準(zhǔn)起碼資源盡快的歸來局部收獲給客戶端,對(duì)于排序分頁頁揭示這種查詢尤其實(shí)用,ALL_ROWS指以大局花費(fèi)資源起碼的措施歸來收獲給客戶端。

基于法定的形式下,數(shù)據(jù)庫的厲行計(jì)劃等閑比擬安寧。但在基于代價(jià)的形式下,我們才有更大的時(shí)機(jī)抉擇***的厲行計(jì)劃。也由于Oracle的許多查詢方面的個(gè)性定然在基于代價(jià)的形式下能力揭示出來,因而我們等閑不抉擇RULE(并且Oracle號(hào)稱從 Oracle 10i版本數(shù)據(jù)庫開始將不再扶持 RULE)。既然是基于代價(jià)的形式,也即便說厲行計(jì)劃的抉擇是依據(jù)表、索引等定義和數(shù)據(jù)的普查消息來定奪的,這個(gè)普查消息是依據(jù) analyze 號(hào)召可能dbms_stats包來定期搜集的。率先存在著一種可能,即便由于搜集消息是一個(gè)很花費(fèi)資源和工夫的動(dòng)作,尤其當(dāng)表數(shù)據(jù)量很大的時(shí)候,因?yàn)樗鸭⑹菍?duì)全副表數(shù)據(jù)舉行重新的全面普查,因而這是我們定然端莊琢磨的問題。我們只能在服務(wù)器安逸的時(shí)候定期的舉行消息搜集。這解釋我們?cè)谝欢稳掌趦?nèi),普查消息可能和數(shù)據(jù)庫本身的數(shù)據(jù)并不合乎;另外即便Oracle的普查數(shù)據(jù)本身也存在著不準(zhǔn)確局部(翔實(shí)參看Oracle DOCUMENT),更重要的一個(gè)問題即便及時(shí)普查數(shù)據(jù)相對(duì)曾經(jīng)比擬準(zhǔn)確,然而Oracle的優(yōu)化器的抉擇也并不是始終是***的計(jì)劃。這也攀附于Oracle對(duì)不同厲行計(jì)劃的代價(jià)的計(jì)算法定(我們等閑是無法懂得翔實(shí)的計(jì)算法定的)。這好像我們定奪從香港還是從北京去英國,車票、機(jī)票等切實(shí)價(jià)格究竟是怎么核算出來的我們并不懂得,可能說我們目前打聽的價(jià)格消息,在我們乘車前往的時(shí)候,懇摯價(jià)格跟我們的核算曾經(jīng)發(fā)生了改變。所有的因素,都將波及我們的全副開支。

厲行計(jì)劃安寧功能帶給我們什么

Oracle存在著厲行計(jì)劃抉擇失手的可能。這也是我們經(jīng)常碰見的一些假象,例如總有人說我的過程在測(cè)驗(yàn)數(shù)據(jù)庫中跑的很好,但在產(chǎn)品數(shù)據(jù)庫上即便跑的很差,甚至后者硬件條件比前者還好,這究竟是為什么?硬件資源、普查消息、參數(shù)設(shè)置都可能對(duì)厲行計(jì)劃發(fā)生波及。由于因素太多,我們總是對(duì)未來懷著一種莫名的生怕,我的產(chǎn)品數(shù)據(jù)庫上線后究竟跑的好不好?于是Oracle供給了一種安寧厲行計(jì)劃的力氣,也即便把在測(cè)驗(yàn)環(huán)境中的運(yùn)行良好的厲行計(jì)劃所發(fā)生的OUTLINES移植到產(chǎn)品數(shù)據(jù)庫,使得厲行計(jì)劃不會(huì)隨著其他因素的改變而改變。

那么OUTLINES是什么呢?先要推薦一個(gè)內(nèi)容,Oracle供給了在SQL中利用HINTS來領(lǐng)導(dǎo)優(yōu)化器發(fā)生我們想要的厲行計(jì)劃的力氣。這在多表連接、混雜查詢中尤其管用。HINTS的種類許多,能夠設(shè)置優(yōu)化器目標(biāo)(RULE、CHOOSE、FIRST_ROWS、ALL_ROWS),能夠指定表連接的次序,能夠指定利用哪個(gè)表的哪個(gè)索引等等,能夠?qū)QL舉行許多精細(xì)的扼制。穿越這種措施發(fā)生我們想要的厲行計(jì)劃的這些HINTS,Oracle能夠存儲(chǔ)這些HINTS,我們稱之為OUTLINES。穿越STORE OUTLINES能夠使得我們具有爾后發(fā)生雷同厲行計(jì)劃的力氣,也即便使我們具有了安寧厲行計(jì)劃的力氣。

這里想給出一個(gè)附帶的解釋即便,切實(shí)上,我們穿越工具修改SQL,例如利用SQL EXPERT修改后的SQL,這些不但僅是加了HINTS而且文本都曾經(jīng)發(fā)生了改變的SQL,也能夠存儲(chǔ)OUTLINES,并可被利用到利用中。但這不是定然見效,我們定然測(cè)驗(yàn)察看是否見效。但由于就算給了訛謬的OUTLINES,數(shù)據(jù)庫在厲行的時(shí)候,揖?智疏忽過去重新生成厲行計(jì)劃而不會(huì)歸來訛謬,因而我們才敢塌心的這么利用。當(dāng)然在Oracle文檔中并未曾指明能夠這么做,文檔中只是解釋,萬一存在OUTLINES的同時(shí)又在SQL中加了HINTS,則會(huì)利用OUTLINES而疏忽HINTS。這秉功能在LECCO將公布的產(chǎn)品中會(huì)利用這一功能,這么能夠?qū)QL EXPERT的修改SQL的力氣和安寧厲行計(jì)劃的力氣聯(lián)合起來,那么我們就對(duì)不能改動(dòng)源代碼的利用具有了相當(dāng)壯大的SQL優(yōu)化力氣。

可能我們會(huì)有疑問,假定安寧了厲行計(jì)劃,那還搜集普查消息干嗎?這是因?yàn)閹讉€(gè)起因構(gòu)成的,率先,目前的厲行計(jì)劃對(duì)于未來發(fā)生了改變的數(shù)據(jù)未必即便輕便的,存在著目前的厲行計(jì)劃不中意未來數(shù)據(jù)的改變后的效率,而新的普查消息的情形下所發(fā)生的厲行計(jì)劃也并不是全副都科學(xué)的。那這個(gè)時(shí)候,我們能夠批準(zhǔn)新搜集的普查消息,然而卻對(duì)新普查消息下不良的厲行計(jì)劃批準(zhǔn)Oracle供給的厲行計(jì)劃安寧性這個(gè)力氣安寧厲行計(jì)劃,這么聯(lián)合起來我們能夠發(fā)生順心的高效的數(shù)據(jù)庫運(yùn)行環(huán)境。

我們還必需關(guān)懷的一個(gè)東西,Oracle供給的dbms_stats包除非具有搜集普查消息的力氣,還具有把數(shù)據(jù)庫中普查消息(statistics)export/import的力氣,還具有只搜集普查消息而使得普查消息不利用于數(shù)據(jù)庫的力氣(把普查消息搜集到一個(gè)特定的表中而不是即刻見效),在這個(gè)基礎(chǔ)上我們就能夠把普查消息export出來再import到一個(gè)測(cè)驗(yàn)環(huán)境中,再運(yùn)行我們的利用,在測(cè)驗(yàn)環(huán)境中我們考察***的普查消息會(huì)導(dǎo)致哪些厲行計(jì)劃發(fā)生改變(DB EXPERT的Plan Version Tracer是模仿不同環(huán)境并積極察看不同環(huán)境中厲行計(jì)劃改變的工具),是變好了還是變差了。我們能夠把變差的這一局部在測(cè)驗(yàn)環(huán)境中利用hints可能利用工具(SQL EXPERT是在重寫SQL這一領(lǐng)土現(xiàn)在***有力的工具)發(fā)生良好的厲行計(jì)劃的SQL,利用這些SQL能夠發(fā)生OUTLINES,然后在產(chǎn)品數(shù)據(jù)庫利用***的普查消息的同時(shí)移植進(jìn)這些OUTLINES。

關(guān)于Oracle數(shù)據(jù)庫厲行計(jì)劃的相關(guān)知識(shí)就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

【編輯推薦】

  1. Oracle 10g正則表達(dá)式REGEXP_LIKE簡(jiǎn)介
  2. Oracle 10g監(jiān)聽listener不能啟動(dòng)的解決方案總結(jié)
  3. Oracle 10g Shrink Table和Shrink Space使用詳解
  4. Oracle 10g利用utlsampl.sql創(chuàng)建scott用戶及樣本數(shù)據(jù)
  5. Oracle 10g透明網(wǎng)關(guān)訪問SQL Server 2000之配置監(jiān)聽
責(zé)任編輯:趙鵬 來源: 新浪博客
相關(guān)推薦

2011-05-19 13:25:14

Oracle數(shù)據(jù)庫

2010-04-02 13:59:08

Oracle數(shù)據(jù)庫

2010-04-14 15:14:11

Oracle數(shù)據(jù)庫

2011-03-29 10:47:49

ORACLE數(shù)據(jù)庫

2011-05-17 15:02:15

ORACLE數(shù)據(jù)庫備份

2011-04-11 13:19:41

Oracle數(shù)據(jù)庫

2009-09-02 18:52:38

Oracle數(shù)據(jù)庫并行

2010-04-09 16:51:24

Oracle數(shù)據(jù)庫

2010-10-20 09:41:37

卸載Oracle

2009-02-09 12:52:32

文件加密Oracle數(shù)據(jù)庫

2011-08-12 13:33:31

Oracle數(shù)據(jù)庫自治事務(wù)

2011-08-15 23:14:34

Oraclerman環(huán)境配置

2011-08-24 10:45:23

Oracle數(shù)據(jù)庫進(jìn)程從屬進(jìn)程

2009-05-14 10:16:36

Oracle優(yōu)化磁盤

2010-04-02 17:11:45

Oracle數(shù)據(jù)庫

2011-07-20 16:28:54

Oracle數(shù)據(jù)庫shared pool

2009-04-22 14:19:32

Oracle中文索引基礎(chǔ)

2019-08-29 07:13:50

oracle數(shù)據(jù)庫主鍵

2010-04-07 14:22:46

2011-08-11 16:55:34

Oracle數(shù)據(jù)庫AWR
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)