Oracle—通過操作系統進程查看數據庫sql語句


工作中遇到一個問題,某報表運行時間特別長,通過操作系統可以看到一個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這個包還有很多地方需要學習。另起一篇吧。官方文檔在這里

 


免責聲明!

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



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