由于windows上ORACLE操作都集中在ORACLE.EXE一个进程上,想具体查看是那个线程占用cpu偏高,需要使用一些windows下观察线程的工具:

process explorer使用图形界面,功能很丰富,可以看作是一个高级任务管理器,打开后,双击oracle.exe进程;选择threads标签页,就可以查看线程信息了

pslist工具使用:

pslist -e oracle -x -s -r 10 \\10.8.2.22 -u user -p pwd

注:
-e oracle 指定进程的名字
-r 10 是10秒刷新一次
\\10.8.2.22 是远端的ip
-u user 指定用户名
-p pwd 指定密码。

在了解了线程的ID号以后,就可以去数据库中查询该线程在做什么,为什么占用cpu很高?

下载: getsql.sql
  1. SELECT /*+ ORDERED */ SQL_TEXT
  2. FROM V$SQLTEXT A
  3. WHERE (A.HASH_VALUE, A.ADDRESS) IN
  4. (SELECT DECODE(SQL_HASH_VALUE, 0, PREV_HASH_VALUE, SQL_HASH_VALUE),
  5. DECODE(SQL_HASH_VALUE, 0, PREV_SQL_ADDR, SQL_ADDRESS)
  6. FROM V$SESSION B
  7. WHERE B.PADDR =
  8. (SELECT ADDR
  9. FROM V$PROCESS C
  10. WHERE C.SPID = &spid))
  11. ORDER BY PIECE ASC;
下载: getsess.sql
  1. SELECT SID, SERIAL#, USERNAME, MACHINE,PROGRAM
  2. FROM V$SESSION
  3. WHERE PADDR = (SELECT ADDR FROM V$PROCESS WHERE SPID = &spid);
Creative Commons 授权
此文, 除非有特别申明, 的授权协议是 Creative Commons Attribution-Noncommercial 2.5 China Mainland 网站授权.