西大贝de烂笔头

多思考、多总结、勤动笔

导航

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这个包还有很多地方需要学习。另起一篇吧。官方文档在这里

 

posted on 2017-11-23 13:30  西大贝  阅读(6354)  评论(0编辑  收藏  举报