本文共 1535 字,大约阅读时间需要 5 分钟。
-- Start
如果你的 SQL 或系统突然 hang 了,很有可能是因为一个 session 阻塞了另一个 session,如何查询是否发生阻塞了呢?看看下面的 SQL吧。
select blocksession.sid as block_session_sid, blocksession.serial# as block_session_serial#, blocksession.username as block_session_username, blocksession.osuser as block_session_osuser, blocksession.machine as block_session_machine, blocksession.status as block_session_status, blockobject.object_name as blocked_table, waitsession.sid as wait_session_sid, waitsession.serial# as wait_session_serial#, waitsession.username as wait_session_username, waitsession.osuser as wait_session_osuser, waitsession.machine as wait_session_machine, waitsession.status as wait_session_statusfrom v$lock blocklock, v$lock waitlock, v$session blocksession, v$session waitsession, v$locked_object lockedobject, dba_objects blockobjectwhere blocklock.block = 1 and blocklock.sid != waitlock.sid and blocklock.id1 = waitlock.id1 and blocklock.id2 = waitlock.id2 and blocklock.sid = blocksession.sid and waitlock.sid = waitsession.sid and lockedobject.session_id = blocksession.sid and lockedobject.object_id = blockobject.object_id;如果上面的语句返回了结果,表明发生了阻塞,这个时候你可以把使用 blocksession 的程序停掉。如果还是不能解决问题,那只能让 DBA 帮你把 blocksession kill 掉,如何 kill 呢? 试一试下面的语句吧。
ALTER SYSTEM KILL SESSION '如果没有发生阻塞,系统就是很慢,该怎么办呢?在" "找答案吧。, ';ALTER SYSTEM KILL SESSION '113,55609';
--更多参见:
-- 声明:转载请注明出处
-- Last edited on 2015-08-28
-- Created by ShangBo on 2015-08-07
-- End