幾種常用的SQL優化工具及方法


轉自:http://blog.itpub.net/35489/viewspace-764856/

1. sql 詳細執行計划,主要檢查驅動路徑,索引是否合適;同一個pl/sql窗口連續執行即可;
explain plan for (select  *  from  HW_PC_SIGNED_COMPANY_V sc) ;
select * from table(dbms_xplan.display(null,null,'all')); 

2. sql monitor,查看sql主要花在哪些時間,真實的行數和IO;三個sql依次執行;

SELECT /*+monitor*/ * from  HW_PC_SIGNED_COMPANY_V sc ; 
select * from v$sql s where s.SQL_TEXT like 'SELECT /*+monitor*/ * from  HW_PC_SIGNED%' ;  
select dbms_sqltune.report_sql_monitor('ftswqgup6hzxx') from dual ;  

3. SQLT 
http://space.itpub.net/35489/viewspace-764348  
查看TXT文件。 

4. SQL Profile 及使用SQL Tuning Advisor來嘗試SQL調優 
http://space.itpub.net/35489/viewspace-747164 

5. 10046 EVENT   

trace 文件的格式都是 sid_ora_pid.trc  , 其中sid 表示數據庫的instance name,  pid 表示 process id . 


A. 可以在PL/SQL中加入如下的語句來進行trace . 

   EXECUTE IMMEDIATE 'ALTER SESSION SET timed_statistics=true' ; 
   EXECUTE IMMEDIATE 'ALTER SESSION SET max_dump_file_size=“unlimited”'; 
   EXECUTE IMMEDIATE 'ALTER SESSION SET TRACEFILE_IDENTIFIER=''TEST_TRACEFILE'''; 
   EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ''10046 trace name context forever,level 8''';
  在最后加入如下語句執行 
   EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ''10046  trace name context off'';   

B. 使用10046 event 跟蹤其他用戶session :

對其他用戶session設置  dbms_system.set_ev
說明:5個參數   sid/serial#/ev/level/username

Select sid,serial#   from v$session where username is not null ;
       SID    SERIAL# 
---------- ---------- -----
       113         227       

或者通過spid查詢sid, serial#  : 
SQL> select  b.*, a.*   from v$process a, v$session b 
          where a.addr = b.paddr and a.spid in (1914, 19140) ; 

執行跟蹤:
exec dbms_system.set_ev(113,227,10046,8,'');

結束跟蹤:
exec dbms_system.set_ev(113,227,10046,0,'');

最后的trace文件都需要使用 tkprof 進行格式轉化 
tkprof  xxx.trc  xxx.txt  explain=apps/passwd sort='(prsela,exeela,fchela)'


6.  SQL Trace
SQL> set autotrace traceonly
顯示: expain+statistics(不顯示數據)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM