查询数据库阻塞锁的SQL

本文提供了一个SQL查询示例,用于找出Oracle数据库中被锁定的会话及其相关信息,包括进程信息、SQL标识符、用户名等。通过特定条件筛选出使用了指定客户端程序的阻塞会话,并按最近一次调用的时间逆序排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

select f.LAST_CALL_ET,f.sql_id,f.USERNAME,f.status,f.PROGRAM,f.machine,f.CLIENT_INFO, f.SID,f.BLOCKING_SESSION,  'kill -9 ' || t.SPID
  from v$process t, v$session f
 where t.addr = f.PADDR
   and f.sid in (SELECT sid
                   FROM v$lock t
                  WHERE (id1, id2, TYPE) IN
                        (SELECT id1, id2, TYPE FROM v$lock WHERE request > 0)
                    and t.REQUEST = 0)
   and f.PROGRAM in ( 'JDBC Thin Client',
   'm_RM.exe',
   'plsqldev.exe'
   )
   order by 1 desc


### 查看和处理 MySQL 中被锁住的 SQL 查询 #### 使用 `SHOW PROCESSLIST` 命令 要查看当前正在运行的线程及其状态,可以使用 `SHOW PROCESSLIST` 命令。这有助于识别哪些查询可能处于等待锁的状态[^1]。 ```sql SHOW FULL PROCESSLIST; ``` 此命令返回的结果集中包含了各个连接的信息,包括 ID、用户、主机、数据库、命令、时间以及具体执行的 SQL 语句等字段。对于长时间未完成的操作尤其值得关注。 #### 利用 InnoDB 存储引擎特性 针对采用 InnoDB 作为存储引擎的情况,可以通过如下方式获取更多有关事务锁定详情: - **显示 Innodb 当前状态** 执行下面这条指令可以获得大量关于最近发生的死锁事件以及其他内部操作信息,其中也涵盖了部分活跃事务列表与它们持有的资源情况。 ```sql SHOW ENGINE INNODB STATUS\G; ``` - **分析表级/行级别锁争用** 如果怀疑存在特定表格级别的竞争,则可通过 INFORMATION_SCHEMA 数据字典中的相关视图来进一步调查。例如,`INFORMATION_SCHEMA.INNODB_LOCKS`, `INFORMATION_SCHEMA.INNODB_TRX` 和 `INFORMATION_SCHEMA.INNODB_LOCK_WAITS` 可用于追踪具体的锁定关系网并定位问题根源所在[^3]。 #### 解决方案概述 一旦确认了有问题的会话或事务之后,管理员可以选择终止这些阻塞源以释放相应资源供其他请求访问。通常情况下,这是通过发出 KILL QUERY 或者 KILL CONNECTION 来实现的,前者仅停止指定 session 上面正在进行的一项查询工作;后者则是切断整个客户端链接,从而强制结束所有关联的任务活动。 ```sql KILL QUERY thread_id; -- 替换thread_id为目标进程ID -- OR KILL CONNECTION connection_id; -- 同样替换connection_id为实际值 ``` 需要注意的是,在采取任何行动之前应当谨慎评估影响范围,并尽可能先尝试理解造成这种现象背后的原因以便从根本上解决问题而不是简单地消除症状。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值