天天看點

sql profile和sql plan baseline的比較

公衆帳号:老虎劉談SQL優化

作者介紹:老虎劉,原oracle 研發部門 Real-World Performance TEAM 成員,現在售後部門SSC專職做資料庫性能優化,主要為銀行、通信、證券、制造等大型企業提供服務。

比較

兩個功能(以下簡稱profile和baseline)都能固定SQL的執行計劃:

1、profile是10g開始提供的功能,baseline是11g開始提供的功能

2、profile隻能固定一個執行計劃;

baseline可以固定多個執行計劃,如某sql有10個執行計劃,可以使用baseline固定使用其中的2個,根據11g adaptive plan的特性,讓優化器從這2個計劃中自動選擇,fixed屬性為yes的執行計劃優先被選擇,可以設定多個計劃的fixed=yes

3、profile的執行計劃可以直接從曆史資料(AWR)裡面load,baseline需要先把awr的資料load到STS(SQL Tuning Set),才能再load到baseline。是以一般生産系統執行計劃突然變差的應急處理,多使用profile。

使用下面兩個腳本做應急處理:

coe_load_sql_profile.sql

coe_load_sql_baseline.sql (如果好的執行計劃還在cache,使用起來也與上面腳本一樣友善)

4、profile可以對未使用綁定變量的SQL進行執行計劃綁定,如:

select xx from t1 where​

​id=1​

​​;select xx from t1 where​

​id=2​

​等,

這樣的sql一般隻能使用profile綁定(選擇其中任意一個sql_id,将​

​force_match參數設定為true​

​​);而baseline不可以,如果要綁定,需要逐條sql_id進行綁定。如果将系統參數​

​cursor_sharing改成FORCE​

​,這樣的SQL也可以使用baseline。

5、profile和baseline之間不是簡單的優先級的問題,如果二者不沖突,則是合并使用;如果沖突,而且baseline可以reproduce(10053顯示)時,使用baseline,否則使用profile。

如何驗證profile是否生效?