文章詳情頁
解析Oracle數(shù)據(jù)庫內(nèi)在索引和參數(shù)的調(diào)整
瀏覽:104日期:2023-11-26 12:58:59
雖然系統(tǒng)級性能調(diào)優(yōu)不是結構化查詢語言(SQL)性能調(diào)優(yōu)的最好解決方案,但是,當你不能改變某些SQL語句時(例如,提供商提供的某些包中的SQL語句),使用SQL處理的常規(guī)模式來調(diào)節(jié)系統(tǒng)性能是極其有幫助的。在日常工作經(jīng)驗的基礎上,Oracle數(shù)據(jù)庫治理員改變某些優(yōu)化參數(shù)來適應庫緩沖區(qū)中SQL類型的變化是很常見的事。 一些較為常見的變更: 1、針對Oracle參數(shù)的更改。對optimizer_mode,optimizer_index_cost_adj和optimizer_index_caching的改變能對SQL執(zhí)行計劃產(chǎn)生巨大影響。 2、 針對統(tǒng)計參數(shù)的更改。使用dbms_stats包導入特定的統(tǒng)計參數(shù)(針對當然處理模式作了調(diào)整的)可對SQL的執(zhí)行速度產(chǎn)生巨大影響。 3、 使用自動化查詢重新寫入。使用Oracle實體化視圖能夠預先聚集、預先匯總數(shù)據(jù),從而減少運行時刻表連接的數(shù)量。對于更新比較少的數(shù)據(jù)庫,也可以通過預先連接表來提高處理速度。 一些對性能調(diào)優(yōu)最重要的Oracle優(yōu)化參數(shù)如下: * optimizer_mode(優(yōu)化模式)-在Oracle 9i中,有許多優(yōu)化模式,都是由參數(shù)optimizer_mode的值決定的。這個參數(shù)的取值范圍是rule, choose, all_rows, first_rows, first_rows_1, first_rows_10 和 first_rows_100. 我們以定義“最好的”執(zhí)行計劃作為開始點。在任何給定的時間,庫緩沖區(qū)中的所有SQL語句都需要有“最好的”執(zhí)行計劃(當然,由于在任何給定的時間里處理需求可能不同,所以這個最優(yōu)執(zhí)行計劃可能會經(jīng)常發(fā)生變化)。什么是“最好的”執(zhí)行計劃?是返回結果最快的執(zhí)行計劃還是使用最少計算資源的執(zhí)行計劃?很明顯,答案依靠于你的數(shù)據(jù)庫的處理過程,Oracle提供了兩種優(yōu)化模式,答應你選擇你認為的“最好的”執(zhí)行計劃: 1、 optimizer_mode=first_rows――相對全表掃描訪問,這個優(yōu)化模式更注重索引訪問。當你想要一個查詢以最快的速度返回結果行時,即使它的邏輯輸入輸出總量比全表掃描高,也要使用這個模式在線訪問系統(tǒng)一般都使用這個模式,因為終端用戶想要盡快地看到第一頁查詢結果。 2、optimizer_mode=all_rows――這個優(yōu)化模式更注重全表掃描(非凡是并發(fā)全表掃描),因為在這種情況下服務器資源的開銷最小。這個模式一般被用于批處理進程和數(shù)據(jù)倉庫中,它們的目標都是使服務器消耗的資源最小化。 3、 optimizer_mode=first_rows_n――從Oracle 9i開始,又有一種新的優(yōu)化模式針對某些返回小結果集的查詢進行優(yōu)化。其取值范圍是first_rows_1, first_rows_10 和 first_rows_100,使用這些參數(shù)值可以確保Oracle能夠優(yōu)化這類SQL。 雖然參數(shù)optimizer_mode控制了“基于代價的優(yōu)化”的總體行為,還有其他Oracle參數(shù)也會對“基于代價的優(yōu)化”產(chǎn)生相當大的影響。Oracle提供了一些重要的參數(shù)來控制“基于代價的優(yōu)化”做出的選擇: 1、optimizer_index_cost_adj――這個參數(shù)可用來調(diào)整“基于代價的優(yōu)化”相對于全表掃描訪問而言,更加傾向于索引訪問的程度。這個值越小,“基于代價的優(yōu)化”就越有可能使用一個可用的索引。 2、 optimizer_index_caching――這個參數(shù)告訴Oracle你的索引在內(nèi)存的數(shù)據(jù)緩沖區(qū)中的可能性有多大。對這個參數(shù)的設置將會影響到“基于代價的優(yōu)化” 做出的對一個表連接(嵌套循環(huán))使用索引還是使用全表掃描選擇。 3、 db_file_multiblock_read_count――當把這個值設置得比較大時(使用更大的服務器),“基于代價的優(yōu)化”識別出分散的(多塊)讀操作的代價或許比識別順序讀操作的代價更小一些。這就使得“基于代價的優(yōu)化”更加傾向于全表掃描。 但是從Oracle 9.2版本開始,情況不再是這樣了。當計算系統(tǒng)統(tǒng)計表時,它包含了“多塊讀操作記數(shù)”(MBRC),這個數(shù)字決定了全表掃描的成本。Oracle 10g則更進一步,加入了一些“系統(tǒng)默認值”,這些默認值是非常不合適的。對于Oracle 9.2版本而言,請注重Metalink上的149560.1。 1、 parallel_automatic_tuning――當該參數(shù)設置為“開啟”時,對于含有許多CPU的Oracle服務器,全表掃描并發(fā)執(zhí)行。因為并發(fā)全表掃描的速度可以非常快,所以“基于代價的優(yōu)化”對于索引訪問開銷很大,因此更加傾向于使用全表掃描。 2、 hash_area_size(假如不使用pga_aggregate_target的話)――這個參數(shù)設置“基于代價的優(yōu)化”相對于使用嵌套循環(huán)和排序合并表連接來說,更傾向于使用哈希連接的程度。 3、sort_area_size(只當不使用參數(shù)pga_aggregate_target時)――這個參數(shù)影響了“基于代價的優(yōu)化”做出的執(zhí)行索引訪問還是執(zhí)行對結果集的排序的決定。這個參數(shù)值越高,則在內(nèi)存中執(zhí)行排序(比使用臨時表空間快上千倍)的可能性就越大,同時“基于代價的優(yōu)化”相對于使用預先排序好的索引檢索,更傾向于使用直接排序。
標簽:
Oracle
數(shù)據(jù)庫
排行榜
