使用Windows工具管理Nt上的Oracle数据库
[入库:2005年8月18日] [更新:2007年3月24日]
link:
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
本文关键:使用Windows工具管理Nt上的Oracle数据库
本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)