文章詳情頁
Oracle Optimizer:遷移到使用基于成本的優(yōu)化器-----系列1.2
Oracle Optimizer:遷移到使用基于成本的優(yōu)化器-----系列1.23.2基于成本的優(yōu)化器(CBO) 基于成本優(yōu)化器遵循計(jì)算代價(jià)的方法學(xué)。所有的執(zhí)行計(jì)劃隨成本標(biāo)識,優(yōu)化器選擇成本最低的一個。在執(zhí)行計(jì)劃中,較高的成本將意味著較高的資源。成本越低,對查詢來說越高效。CBO使用所有存儲在數(shù)據(jù)字典中可用的統(tǒng)計(jì)資料信息和柱狀圖,用戶提供提示和的參數(shù)設(shè)置來達(dá)成使用的成本,CBO生成所有可能訪問方法的排列然后選擇最合適的。排列的數(shù)量依靠于查詢中出現(xiàn)的表數(shù)量,有時能達(dá)到約80,000個排列甚至更多,請參考系列的第二部分參數(shù)章節(jié)來設(shè)置相關(guān)參數(shù)。CBO也可能完成諸如查詢轉(zhuǎn)換、視圖合并或轉(zhuǎn)換的操作,增加join謂詞等等。這將改變原始語句并改變正存在或者是新添加的謂詞,得自新的訪問計(jì)劃的所有的這些目的會比原來存在的好些。注重轉(zhuǎn)換并不影響返回的數(shù)據(jù),而僅僅是執(zhí)行路徑,請參考系列第二部分參數(shù)章節(jié)相關(guān)聯(lián)的信息。3.2.1統(tǒng)計(jì)資料統(tǒng)計(jì)資料按順序提供了準(zhǔn)確的輸入以供CBO正常工作;生成的數(shù)據(jù)存儲在對象中并且包括諸如表中行的數(shù)量、列中單一值、索引中頁的塊數(shù)等等信息。統(tǒng)計(jì)資料越準(zhǔn)確,優(yōu)化器提供的結(jié)果越高效。請參考本系列第三部分生成統(tǒng)計(jì)資料章節(jié)中怎樣生成這些信息和如何最好地維持它。統(tǒng)計(jì)資料可能是精確的或估計(jì)的,它用COMPUTE 子句分析在對象中所有的數(shù)據(jù),它將給優(yōu)化器精確的信息以工作并且達(dá)到完美的執(zhí)行計(jì)劃。用ESTIMATE子句,將會分析在對象中提及的樣本大小的數(shù)據(jù)內(nèi)容從而生成統(tǒng)計(jì)資料,樣本大小會被指定成隨機(jī)分析的行的數(shù)量或者行的百分比從而生成統(tǒng)計(jì)資料,也可以指定可選的塊樣例,假如系統(tǒng)中存在巨額表數(shù)據(jù),它將節(jié)約時間。好的執(zhí)行計(jì)劃的前提依靠于估計(jì)值和精確值有多接近,可以試驗(yàn)一下設(shè)置不同的樣本大小來達(dá)到適合的目標(biāo)或?qū)Σ煌愋偷谋懋a(chǎn)生不同的評估級別,這種思想對達(dá)到接近精確統(tǒng)計(jì)是相當(dāng)可行的。統(tǒng)計(jì)資料存儲在所有者為SYS用戶的數(shù)據(jù)詞典中,下面的視圖顯示了表、列,索引的收集統(tǒng)計(jì)信息.表:DBA_TABLESNUM_ROWS –行的數(shù)量BLOCKS – 已用的塊數(shù)量EMPTY_BLOCKS –未使用的空塊數(shù)量AVG_SPACE – 分配給表的平均自由空間(以字節(jié)計(jì)),考慮所有空的和自由的塊.CHAIN_CNT – 鏈連或移動的行的數(shù)量AVG_ROW_LEN –以字節(jié)計(jì)的平均行的長度LAST_ANALYZED – 上次表分析的日期SAMPLE_SIZE –提供給ESTIMATE統(tǒng)計(jì)的樣本大小,對于COMPUTE則等于NUM_ROWS列的值.GLOBAL_STATS –對于分區(qū)表, YES –收集統(tǒng)計(jì)資料將作為一個整體, NO –收集統(tǒng)計(jì)資料將估計(jì)表USER_STATS –假如用戶指明為表設(shè)置統(tǒng)計(jì),則為YES對于一個表的單獨(dú)分區(qū)的統(tǒng)計(jì)資料從DBA_TAB_PARTITIONS可以找到,簇統(tǒng)計(jì)資料從DBA_CLUSTERS可以找到.列DBA_TAB_COLUMNS NUM_DISTINCT – 單一值的數(shù)量LOW_VALUE –最小值HIGH_VALUE – 最高值DENSITY – 列的聚集度.NUM_NULLS –涉及列空值的記錄數(shù) NUM_BUCKETS – 柱狀圖中柱的數(shù)量,參考柱狀圖章節(jié)SAMPLE_SIZE –ESTIMATE統(tǒng)計(jì)提供的樣本大小,假如是COMPUTE則等于全部行數(shù)LAST_ANALYZED -上次表分析的日期DBA_TAB_COL_STATISTICS 顯示相似的數(shù)據(jù),–對于分區(qū)表列統(tǒng)計(jì)資料從DBA_PART_COL_STATISTICS和DBA_SUBPART_COL_STATISTICS可以找到索引DBA_INDEXES BLEVEL –索引的深度,從根級到葉級LEAF_BLOCKS –頁級塊的數(shù)量. DISTINCT KEYS – 單一鍵值的數(shù)量AVG_LEAF_BLOCKS_PER_KEY –每一個單一鍵值出現(xiàn)的平均數(shù)量對于獨(dú)特索引應(yīng)該為1AVG_DATA_BLOCKS_PER_KEY –單一鍵值指向的表中塊的平均數(shù)量CLUSTERING_FACTOR –決定行按索引排序的總數(shù).假如數(shù)量靠近塊的數(shù)量,則該表是按照索引順序排序的,也就是說,頁未級的的全部指向表中同一塊的行.假如索引與行數(shù)接近,索引會隨機(jī)排序, 也就是說, 頁未級的的全部是分散指向多個塊的行。NUM_ROWS – 索引行數(shù)SAMPLE_SIZE - ESTIMATE統(tǒng)計(jì)提供的樣本大小,假如是COMPUTE則等于全部行數(shù)LAST_ANALYZED -上次表分析的日期GLOBAL_STATS對于分區(qū)表, YES –收集統(tǒng)計(jì)資料將作為一個整體, NO –收集統(tǒng)計(jì)資料將估計(jì)表USER_STATS假如用戶指明為表設(shè)置統(tǒng)計(jì),則為YESPCT_DIRECT_Access –索引組織表的次要索引,有效猜測行的百分比單一分區(qū)索引統(tǒng)計(jì)可從DBA_IND_PARTITIONS 和DBA_IND_SUBPARTITIONS找到涉及到柱狀圖信息的數(shù)據(jù)詞典以后將會討論. (待續(xù)) right'>(出處:清風(fēng)軟件下載學(xué)院)
標(biāo)簽:
Oracle
數(shù)據(jù)庫
排行榜
