网站首页 > 技术文章 正文
概述
先看一个数据库监控图:
这上面的信息中,怎么判断XX会话被另一个会话堵塞呢?
如果用网上的判断死锁sql去查询,类似如下:
思考了一段时间,决定从gv$session入手,下面先看第一条sql
1、查看活动会话信息
--查看活动会话信息 SELECT INST_ID, SID, SERIAL#, PROCESS, USERNAME, LOCKWAIT, SCHEMANAME, OSUSER, MACHINE, PROGRAM, SQL_ID, MODULE, ACTION, LOGON_TIME, BLOCKING_SESSION_STATUS, BLOCKING_INSTANCE, BLOCKING_SESSION, EVENT, WAIT_CLASS, SECONDS_IN_WAIT, STATE FROM GV$SESSION WHERE USERNAME IS NOT NULL AND STATUS = 'ACTIVE' ORDER BY LOGON_TIME, SID;
2、查看当前被阻塞lock信息(waiter)
--注: 如果state值为Waiting,那么wait_time值无用。Second_in_wait值是实际的等待时间(单位:秒)。 --如果state值为Wait unknow time,那么wait_time值和Second_in_wait值都无用。 --如果state值为Wait short time,那么wait_time值和Second_in_wait值都无用。 --如果state值为Waiting known time,那么wait_time值就是实际等待时间(单位:秒),Second_in_wait值无用。 SELECT INST_ID "实例ID", SID, SERIAL#, PROCESS, USERNAME, SCHEMANAME, OSUSER, MACHINE, PROGRAM, SQL_ID, MODULE, ACTION, LOCKWAIT, BLOCKING_SESSION_STATUS, BLOCKING_INSTANCE "阻塞会话实例", BLOCKING_SESSION "阻塞会话SID", EVENT "等待事件", WAIT_CLASS, LOGON_TIME, CASE WHEN STATE = 'WAITING' THEN SECONDS_IN_WAIT WHEN STATE = 'WAITING KNOWN TIME' THEN WAIT_TIME END AS "等待时间(s)", STATE FROM GV$SESSION WHERE USERNAME IS NOT NULL AND STATUS = 'ACTIVE' AND LOCKWAIT IS NOT NULL;
因为想尽量放在一条sql把需要的信息都展示出来,所以字段会比较多。
3、查看阻塞会话SID信息(holder)
--考虑到多实例会存在sid一致的情况,所以加了实例区分 SELECT INST_ID "实例ID", SID, SERIAL#, PROCESS, USERNAME, SCHEMANAME, OSUSER, MACHINE, PROGRAM, SQL_ID, MODULE, ACTION, LOCKWAIT, BLOCKING_SESSION_STATUS, BLOCKING_INSTANCE, BLOCKING_SESSION "阻塞会话SID", EVENT "等待事件", WAIT_CLASS, LOGON_TIME, CASE WHEN STATE = 'WAITING' THEN SECONDS_IN_WAIT WHEN STATE = 'WAITING KNOWN TIME' THEN WAIT_TIME END AS "等待时间(s)", STATE FROM GV$SESSION WHERE INST_ID = '&INSTANCE' and SID = '&SID';
4、查看会话ID在执行什么sql
select sid, sql_text from v$session a, v$sql b where sid in (&sid) and (b.sql_id = a.sql_id or b.sql_id = a.prev_sql_id);
5、查看SQL_ID相关sql
select listagg(sql_text,' ') within group (order by piece) from v$sqltext where sql_id = '&sqlid' group by sql_id
这个基本上包括了Oracle在发生堵塞锁时的一些查询命令了,后面抽空在整理一下mysql死锁的一些命令总结,感兴趣的朋友可以关注下~
猜你喜欢
- 2024-10-16 数据库Oracle的安装及访问 oracle数据库安装视频教程
- 2024-10-16 Oracle数据库不为人知的几个概念:selectivity、cardinality和CF
- 2024-10-16 Oracle数据库之高级查询二 oracle 高级
- 2024-10-16 Oracle数据库死锁查询 oracle数据库死锁处理方法
- 2024-10-16 Oracle——怎么查看执行计划 oracle查看执行计划详解
- 2024-10-16 详解六种方法查看oracle执行计划=》优化必备
- 2024-10-16 oracle数据库条件查询之本月之前 oracle查询当月的每一天
- 2024-10-16 Oracle查看Sql执行计划的方法及示例
- 2024-10-16 详解Oracle 数据库启动过程 oracle数据库启动步骤顺序
- 2024-10-16 分享两个Oracle的shell脚本---一键获得数据库实例状态、参数及包
你 发表评论:
欢迎- 06-24发现一款开源宝藏级工作流低代码快速开发平台
- 06-24程序员危险了,这是一个 无代码平台+AI+code做项目的案例
- 06-24一款全新的工作流,低代码快速开发平台
- 06-24如何用好AI,改造自己的设计工作流?
- 06-24濮阳网站开发(濮阳网站建设)
- 06-24AI 如何重塑前端开发,我们该如何适应
- 06-24应届生靠这个Java简历模板拿下了5个offer
- 06-24服务端性能测试实战3-性能测试脚本开发
- 567℃几个Oracle空值处理函数 oracle处理null值的函数
- 566℃Oracle分析函数之Lag和Lead()使用
- 550℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 546℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 545℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 536℃【数据统计分析】详解Oracle分组函数之CUBE
- 526℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 519℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)