eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« Oracle诊断案例-SGA与Swap之一 | Blog首页 | Use RMAN to Manage BackupSet »

使用Windows工具管理Nt上的Oracle数据库

1.TOP

Top 工具可以监视最消耗系统资源的进程

Pid 即process id,Windows是多线程服务器,每个进程包含一系列线程,这个与UNIX不同,Unix每个Oralce进程独立存在,在Nt上所有线程由Oralce进程衍生。

所以只用TOP工具我们还无法找出每个连接的用户进程。

 

71% 00000000?1?16384?0?8:52:53.936 No Name Found
0% 00000008?4116?282624?24576?0:00:45.164 System
1% 000000B8?27023?991232 2207744?0:03:10.313 CSRSS.EXE
0% 00000524?1844 2035712 3137536?0:00:11.726 rundll32.exe
0% 0000032C?1002 1765376 1380352?0:00:08.432 AOM.exe
0% 000004E8?773695 7610368 8146944?0:04:26.533 XDICT.EXE
0% 00000720?583880 5079040 33280000?0:08:29.122 NetCaptor.exe
23% 000006F4?11882 37056512 79757312?0:00:07.661 oracle.exe
0% 00000420?1622 1478656 2420736?0:00:00.170 SQLPLUS.EXE
                      

如果windows上由于某个进程的sql或其他问题导致资源过度占用或消耗,比如如下这样一条语句,那么我们怎样来找到这条问题sql呢?

2.QSLICE

找到最消耗资源的线程号,本例中为(6ec),为16进制,需要转换,v$process视图中的进程ID为十进制

使用getsql.sql脚本即可获得当前正在执行的SQL语句:

 

REM getsql.sql
REM author eygle
REM 在windows上,已知进程ID,得到当前正在执行的语句
REM 在windows上,进程ID为16进制,需要转换,在UNIX直接为10进制
SELECT   /*+ ORDERED */
         sql_text
    FROM v$sqltext a
   WHERE (a.hash_value, a.address) IN (
            SELECT DECODE (sql_hash_value,
                           0, prev_hash_value,
                           sql_hash_value
                          ),
                   DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
              FROM v$session b
             WHERE b.paddr = (SELECT addr
                                FROM v$process c
                               WHERE c.spid = TO_NUMBER ('&pid', 'xxxx')))
ORDER BY piece ASC
/

运行以上脚本:

 

ok,找到这最消耗资源的问题SQL接下来就可以进行针对性调整了.

相关工具下载地址:

http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/qslice-o.asp

 


历史上的今天...
    >> 2012-10-08文章:
    >> 2010-10-08文章:
    >> 2008-10-08文章:
           OOW 2008 回顾 - Larry的演讲
    >> 2005-10-08文章:
           EMC阵列磁盘又又又坏

无觅

By eygle on 2004-10-08 15:03 | Comments (6) | FAQ | 59 |

6 Comments

你好:首先感謝您的經驗分享,個人受益匪淺.但是按照上述步驟运行以上脚本後...."没有任何数据列被选取"
.....

有时候一个session不一定有正在执行的SQL...

发现一个例外,我的使用环境是Windows server 2003 x86,使用的是Oracle 9.2.0.1,
通过qslice看到的SID有时是四位hex数字,必须把qslice窗口最大化才能看全。
如果出现这种情况,必须用to_number('01ad','xxxx')才能正常转换,看到进程中
运行的SQL语句。

“比Qslice好用的工具有很多了”,能给几个提示吗,感谢。


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com