Oracle 10053事件

abstractcyj發表於2013-09-27
10053事件可以將CBO解析SQL,做出執行計劃的過程一步一步演示給我們看,讓我們可以直接窺視到這裡究竟發生了什麼事情。

SQL> create table t3 as select rownum x from dba_objects;

Table created.

SQL> create index ind_t3 on t3(x);

Index created.

SQL> exec dbms_stats.gather_table_stats(user, 'T3',cascade=>true);

PL/SQL procedure successfully completed.

SQL> create table t4 as select x, 'T1' name from t3 where x < 10000;

Table created.

SQL> alter session set events  '10053 trace name context forever, level 1';

Session altered.

SQL> explain plan for select t4.* from t3, t4 where t3.x < 100 and t3.x = t4.x;

Explained.

SQL> alter session set events '10053 trace name context off';

Session altered.

SQL>

10053時間會在生成一個trace檔案。但是這個檔案不能被tkprof工具處理,tkprof只能處理sql trace或者10046事件產生的trace檔案。可以用以下SQL來檢視當前session的trace檔案的位置:

SELECT d.value || '/' || lower(rtrim(i.instance, chr(0))) || '_ora_' ||p.spid || '.trc' trace_file_name
  FROM (SELECT p.spid
          FROM v$mystat m, v$session s, v$process p
         WHERE m.statistic# = 1
           AND s.sid = m.sid
           AND p.addr = s.paddr) p,
       (SELECT t.instance
          FROM v$thread t, v$parameter v
         WHERE v.name = 'thread'
           AND (v.value = 0 OR t.thread# = to_number(v.value))) i,
       (SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') d;

其他的session可以用:
SELECT d.value || '/' || lower(rtrim(i.instance, chr(0))) || '_ora_' ||
       p.spid || '.trc' trace_file_name
  FROM (SELECT p.spid
          FROM v$session s, v$process p
         WHERE s.sid = ''
           AND s. serial# = ''
           AND p.addr = s.paddr) p,
       (SELECT t.instance
          FROM v$thread t, v$parameter v
         WHERE v.name = 'thread'
           AND (v.value = 0 OR t.thread# = to_number(v.value))) i,
       (SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') d;

需要將SID, SERIAL#號填充到SQL條件裡。

因為生成的trace檔案很冗長,這裡先不列出內容。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-773474/,如需轉載,請註明出處,否則將追究法律責任。

相關文章