借助oracle的10053事件event,我們可以監控到cbo對sql進行成本計算和路徑選擇的過程和方法。
10053事件有兩個級別:
level 2:2級是1級的乙個子集,它包含以下內容:
column statistics
single access paths
join costs
table joins considered
join methods considered (nl/ms/ha)
level 1: 1級比2級更詳細,它包含2級的所有內容,在加如下內容:
parameters used by the optimizer
index statistics
啟用10053事件
alter session set events='10053 trace name context forever, level 1';
alter session set events='10053 trace name context forever, level 2';
關閉10053事件:
alter session set events '10053 trace name context off';
說明:1、sqlplus中開啟autotrace看到的執行計畫實際上是用explain plan 命令得到的,explain plan 命令不會進行bind peeking。應該通過v$sql_plan檢視sql的真實的執行計畫。
2、10053只對cbo有效,而且如果乙個sql語句已經解析過,就不會產生新的trace資訊。
3、10053事件產生的trace檔案不能用tkprof格式化。
4.通過10053事件分析乙個sql執行計畫的產生過程,需要貼出trace中的相關資訊和必要的文字說明。
測試:
1)建立測試表t1,t2
sql> create table t1 as select * from all_objects;
table created.
sql> create table t2 as select * from all_objects where rownum<=100;
table created.
sql> select count(*) from t1;
count(*)
----------
5756
sql> select count(*) from t2;
count(*)
----------
100
2)對t1,t2表進行分析,不包含直方圖
sql> exec dbms_stats.gather_table_stats ('scott','t1',cascade=>true,estimate_percent=>null,method_opt=>'for all columns size 1');
pl/sql procedure successfully completed.
sql> exec dbms_stats.gather_table_stats ('scott','t2',cascade=>true,estimate_percent=>null,method_opt=>'for all columns size 1');
pl/sql procedure successfully completed.
3)生成10053 trace檔案
sql> conn / as sysdba
connected.
4)檢視trace檔案
10046事件跟蹤(10053)
前提 1 必須確保timed statistics為true,這個引數可以在會話級上進行修改。2 為了確保trace輸出能夠完整進行,還要調整此會話對trace檔案大小的限制,一般將此限制取消,即將max dump file size設定為unlimited,或者設定為乙個很大的闕值。1 跟蹤本會話...
路由事件詳解
路由事件 路由事件是指一些在試圖樹中按照它們的路由規則可上拋或下拋的事件。這種路由事件經常有 管道 冒泡 直接 可以將事件處理器直接掛接在新增事件的元素上,也可以通過附加屬性語法 button.click button click 掛接在他上面或者下面的其他元素上。路由事件一般是成對出現的。第乙個是...
onPropertyChange 事件詳解
先看這麼一段解釋 onpropertychange 當在物件上進行屬性改變時候觸發 onchange 當物件內容或者選擇內容改變時候觸發 當乙個html元素的屬性改變的時候,都能通過onpropertychange來捕獲。例如乙個物件的value屬性被頁面的指令碼修改的時候,onchange無法捕獲...