1. 程式人生 > >資料庫優化之語句優化模式optimizer

資料庫優化之語句優化模式optimizer



一、優化資料庫

1.調整資料結構的設計(分割槽、索引)

2.調整應用程式結構設計

3.調整資料庫的SQL查詢(語句優化器 oracle optimizer 和行鎖管理器)

4.調整伺服器記憶體分配(調整資料庫系統全域性區SGA的資料快取區,日誌緩衝區和共享池大小,還可以調整程式全域性區PGA,SGQ要根據實際情況調整,並不是越大越好)

5.調整I/O,這一步是在資訊系統開發之前完成的,把同一個表空間的資料檔案放在不同的硬碟上,做到硬碟之間I/O負載均衡

6.調整作業系統引數(緩衝池、程序記憶體)

7.SQL語句優化

二、CBO和RBO的講解:

RBO:是基於規則的優化器,oracle10後基本就被淘汰了

CBO:是基於代價的優化器,根據sql生成一組可能被使用的執行計劃,估算出每個執行計劃的代價,最後選擇一個代價最小的執行計劃。

查詢優化器:由查詢轉換器、代價估算器和計劃生成器組成。

1.查詢轉換器(Query Transformer):等價改變查詢語句的形式,以便產生更好的執行計劃,他決定是否重寫使用者的查詢(檢視合併、謂詞推進、非巢狀子查詢、子查詢返巢狀、物化檢視重寫)

2.代價轉換器(Estimator):評估總體成本(選擇性、基數、成本)

3.計劃生成器(Plan Genertor):生成大量執行計劃,選擇總體代價或者成本最低的

執行過程圖:

修改會話級別(只針對於當前會話有效):

alert session set optimizer_mode=first_row_100;

語句級別(使用提示hints來實現):

select /*+rule+*/ * from dba_objects where rownum<=10

三、設定資料庫的優化模式:ALL_ROWS和First_Rows

在CBO的優化模式下,可使用optimizer_mode引數控制優化模式

適用場景:

All_rows:希望優化程式給出一種儘快得到全部記錄的執行計劃,目標是增加系統的吞吐量,例如得到全部報表,當一個表有統計資訊時,以最快的方式返回表中所有行

First_rows:優化程式給出一種可以快速的得到第一行的執行計劃,目標是減少系統的響應時間,例如:分頁顯示,當一個表有統計資訊時最快的方式返回查詢的最先幾行

修改優化級別:

alert system set optimizer_mode=rule,scope=both

檢視優化級別:

show parameter optimizer_mode