查询数据库锁以及锁对应SQL语句的若干查询SQL
2011-01-12 00:00
357 查看
这几天新上线项目的WebLogic频繁出现线程阻塞的情况,导致客户端链接超时,影响正常业务办理。开始以为遇到了WebLogic的bug,针对相关问题修复补丁后问题依然,于是开始考虑是否数据库部分有问题,因为每次线程阻塞都与oracle的操作有关。今天再次出现阻塞问题时,查询了一下数据库锁,发现确实存在数据库锁,开始怀疑应用中存在问题SQL。因业务不能长时间停滞,故重启WebLogic解决故障后,检查应用中锁涉及的相关SQL语句,未发现问题SQL。于是搜集一番SQL语句,以备再次出现问题时,通过session的sid查询出问题SQL的所在。
下述SQL语句一部分是从网上陆陆续续找到的,一部分是从oracle书籍中翻到到,整理在这里。
两个查询数据库锁的SQL,第一个显示了锁对应的对象都有什么,比如表名。第二个显示的信息更多些,比如说锁什么时间开始的,当前的状态为何等等。下述SQL需要具有DBA角色的用户进行查询。select b.owner,b.object_name,l.session_id,l.locked_mode
from v$locked_object l, dba_objects b
where b.object_id=l.object_id;
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
-- 查询会话ID
select username,sid,serial# from v$session;
-- 查询spid
select pro.spid
from v$session ses,v$process pro where ses.sid=xxx and ses.paddr=pro.addr;
-- 查询会话对应sql
SELECT SE.sid,
SE.serial#,
PR.spid,
SE.status,
SUBSTR(SE.program, 1, 10) PROG,
SUBSTR(SE.machine, 1, 10) MACH,
SQ.sql_text
FROM v$session SE, v$sqlarea SQ, v$process PR
WHERE SE.paddr = PR.ADDR(+)
AND SE.sql_address = SQ.address(+)
AND schemaname <> 'SYS'
ORDER BY SE.sid
-- 查询v$session_wait获取各进程等待事件
select sid, event,p1, p1text from v$session_wait;
-- 通过已知的session的sid联合v$session、v$sqltext视图获得相关session正在执行的完整的SQL语句
select a.sql_text from v$sqltext a, v$session b
where a.hash_value=b.sql_hash_value
and b.sid='102';
-- 检查SQL的执行计划 此SQL需要使用执行SQL的用户进行检查
set autotrace trace explain;
此处写入执行的相关SQL,回车,即会显示SQL的执行计划。
下述SQL语句一部分是从网上陆陆续续找到的,一部分是从oracle书籍中翻到到,整理在这里。
两个查询数据库锁的SQL,第一个显示了锁对应的对象都有什么,比如表名。第二个显示的信息更多些,比如说锁什么时间开始的,当前的状态为何等等。下述SQL需要具有DBA角色的用户进行查询。select b.owner,b.object_name,l.session_id,l.locked_mode
from v$locked_object l, dba_objects b
where b.object_id=l.object_id;
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
-- 查询会话ID
select username,sid,serial# from v$session;
-- 查询spid
select pro.spid
from v$session ses,v$process pro where ses.sid=xxx and ses.paddr=pro.addr;
-- 查询会话对应sql
SELECT SE.sid,
SE.serial#,
PR.spid,
SE.status,
SUBSTR(SE.program, 1, 10) PROG,
SUBSTR(SE.machine, 1, 10) MACH,
SQ.sql_text
FROM v$session SE, v$sqlarea SQ, v$process PR
WHERE SE.paddr = PR.ADDR(+)
AND SE.sql_address = SQ.address(+)
AND schemaname <> 'SYS'
ORDER BY SE.sid
-- 查询v$session_wait获取各进程等待事件
select sid, event,p1, p1text from v$session_wait;
-- 通过已知的session的sid联合v$session、v$sqltext视图获得相关session正在执行的完整的SQL语句
select a.sql_text from v$sqltext a, v$session b
where a.hash_value=b.sql_hash_value
and b.sid='102';
-- 检查SQL的执行计划 此SQL需要使用执行SQL的用户进行检查
set autotrace trace explain;
此处写入执行的相关SQL,回车,即会显示SQL的执行计划。
相关文章推荐
- 不同数据库sql查询表字段以及结构的语句
- PowerDesigner生成注释以及对应数据库的sql语句
- 各种帮助查询数据库以及运行状态的SQL查询语句
- 关于过去工作的一些总结:常用sql语句以及数据库查询优化
- PowerDesigner生成注释以及对应数据库的sql语句
- SQL语句查询数据库的触发器、存储过程、视图以及表的SQL语句
- PowerDesigner生成注释以及对应数据库的sql语句
- SQL语句:查询数据库中所有非系统表的信息
- ACCESS:跨数据库查询的SQL语句
- 给数据库字段添加注释,并且可以通过sql语句查询
- 数据库查询锁表以及解锁表的sql
- SQL语句的增删改查及数据库表的多表连接查询
- 关于数据库查询语句SqlDataReader的连接释放问题的解决办法
- 在一个千万级的数据库查寻中,如何提高查询效率?分别说出在数据库设计、SQL语句、java等层面的解决方案。
- SQL语句集锦——数据库表查询、更新、删除等SQL语法
- SQLServer中用T―SQL命令查询一个数据库中有哪些表的sql语句
- sql查询数据库中所有表的记录条数,以及占用磁盘空间大小。
- JSP本页查询显示,以及如何拼接SQL语句
- SQL中利用sql语句查询数据库中的所有表、存储过程
- 数据库-T-SQL 语句-高级查询