前两天发现公司数据库从连接到查询的变得非常慢,已经影响到了项目的开发,所以就试着去解决了一下,这里记录下过程:
- 连接上数据库后,执行下面的语句查看死锁进程,主要看sid和serial#,因为后面要根据他们去Kill进程:
select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo.locked_mode
from v$locked_object lo, dba_objects ao, v$session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid;
- 如果查询有结果说明存在死锁进程,用sid和serial#Kill进程:
alter system kill session '你的sid,你的serial';
- kill之后再去执行1中的语句查看有没有产生新的死锁,有的话继续Kill,另外要注意一下object_name,也可根据object_name去查看是哪个对象产生的死锁,从而判断死锁发生原因。