原文链接:
http://www.eygle.com/faq/Use.Nt.tools.manage.Oracle.htm
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
[电脑应用]用C#动态创建Access数据库 [Web开发]asp 在线备份与恢复sqlserver数据库代码详解 [电脑应用]教你如何远程管理MSSQL数据库 [其他]关于数据库优化查询计划的方法总结 [电脑应用]Linux数据库大比拚 [JAVA开发]Java连接各种数据库的实例 [聊天工具]QQ IP数据库Build 0825 纯真版__天极Yesky [系统软件]EXP-00008: ORACLE error 904 encountered的解决方… [系统软件]利用crontab系统每天定时备份MySQL数据库 [系统软件]备份与恢复Windows2003的AD数据库
|