我有一条查询语句:select count(*) from (select id,pid,proName from 工程表)
我执行这条语句时,ORACLE处于执行中,无法停止下来,更查不出结果,即便是关闭oracle服务也关不了,导致我的ORACLE处于高速运行停不下来,CPU使用率一直达到50%,只能重启计算机。
而我朋友的机器上执行这句话时却能执行成功,可以查出结果,这是为什么呢?高手帮忙解释一下,俺菜鸟,需要告诉帮助
我执行这条语句时,ORACLE处于执行中,无法停止下来,更查不出结果,即便是关闭oracle服务也关不了,导致我的ORACLE处于高速运行停不下来,CPU使用率一直达到50%,只能重启计算机。
而我朋友的机器上执行这句话时却能执行成功,可以查出结果,这是为什么呢?高手帮忙解释一下,俺菜鸟,需要告诉帮助
select object_name,
machine,
s.sid,
p.spid,
s.osuser,
s.program,
s.STATUS,
s.ACTION,
p.SERIAL#,
l.SESSION_ID
from v$locked_object l, dba_objects o, v$session s, v$process p
where l.object_id = o.object_id
and l.session_id = s.sid
and s.paddr = p.addr;
杀进程:
alter system kill(l.SESSION_ID,p.SERIAL#)
查出来结果后 把session_id和SERIAL#放进去
alter system kill session 'session_id,SERIAL#' 还有 想从根本上解决问题 就要从你的sql入手
select count(*) from (select id,pid,proName from 工程表)
写成select count(*),id,pid,proName from 工程表 这样会好些
实在不行 你就select count(*) from 工程表 看看数据量
ALTER SYSTEM KILL SESSION '12,44';
也删不掉会话,程序不停的在那查询,更重要的是为什么它会死锁呢,为什么我朋友用他的机器查没有死锁,而且还能查出结果呢
kill session的时候有什么问题,报什么错?
试试alter system kill session '10,24' immediate
所以读不存在死锁。
可能是数据资源争用造成查询缓慢。
l.OS_USER_NAME,l.PROCESS FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID用这条语句可以定位到时那个用户在服务端占用资源,导致数据库思索