工作中遇到一個問題,某報表運行時間特別長,通過操作系統可以看到一個oracle進程消耗資源比較大,如何能夠通過該操作系統進程找到具體SQL呢。記錄如下:
1、查看Linux系統進程號
可以通過top動態查看某進程的資源使用情況,也可以通過ps aux查看某進程的相關信息。
2、通過v$process查看oracle中對應的進程
SQL> select * from v$process where spid = '25802'; ADDR PID SPID PNAME USERNAME SERIAL# TERMINAL PROGRAM TRACEID ....... ---------------- ---------- ------------------------ ----- --------------- ---------- ------------------------------ ------------------------------------------------ -------------------------------------------------------------------------------- ....... 0000000358BE4CD0 78 25802 oracle 158 UNKNOWN .......
3、通過v$session查看具體的會話
SQL> select sql_id,status from v$session where paddr = '0000000358BE4CD0'; SQL_ID STATUS ------------- -------- akjssv2gwa7jf ACTIVE
4、通過dbms_xplan.display_cursor查看執行計划
SQL> select * from table(dbms_xplan.display_cursor('akjssv2gwa7jf')); PLAN_TABLE_OUTPUT -------------------------------------------------------------------------------- SQL_ID akjssv2gwa7jf, child number 0 ------------------------------------- .....有刪減......
通過以上步驟就可以通過操作系統的某個進程ID確定到某個sql,然后查看執行計划,進行優化了。其中dbms_xplan.display_cursor這個包還有很多地方需要學習。另起一篇吧。官方文檔在這里。