---
title: kill session 卡住，会话状态为 SESSION_KILLED 的常见原因及解决方法-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于kill session 卡住，会话状态为 SESSION_KILLED 的常见原因及解决方法相关的常见问题和使用技巧，帮助您快速解决kill session 卡住，会话状态为 SESSION_KILLED 的常见原因及解决方法的难题。
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# kill session 卡住，会话状态为 SESSION_KILLED 的常见原因及解决方法

更新时间：2026-06-12 03:56

适用版本： V3.1.x、V3.2.x 内容类型：Troubleshoot  

## 问题现象

当需要终止慢查询或长事务时，通常会采取 kill session 的方式关闭活跃会话来达到终止 SQL 执行的目的，但是有时可能会发生会话无法关闭、kill session 卡住的现象，具体表现如下。

1. kill session 卡住长时间无返回。

   ![image01](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/transaction-management/20250311kill-session-status-killed01.png)
 2. 通过查看 `__all_virtual_processlist` 中的会话信息，会发现对应会话的 state 为 SESSION_KILLED。
 3. 查看 `__all_virtual_processlist` 中 info 列值可能为 SQL，也可能为 kill session_id; 并且可能存在嵌套关系。
 4. 通过 obstack 采集 OBServer 的线程堆栈获取 kill session 相关信息。

      1. 发起 kill session 的线程在等待获取 latch。

        ![image02](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/transaction-management/20250311kill-session-status-killed02.png)
      2. 被 kill 的会话对应的线程在回滚事务，但是事务回滚卡住（事务回滚无法结束），一般卡在 `ObScheTransCtx::wait_end_stmt` 上。

        ```shell
          Thread 1346403 (TNT_L0_1006)
          #0    0x00007fd20333ecf6 in ??? from /usr/lib64/libpthread-2.28.so
          #1    0x0000000009b305c9 in bool obutil::Cond::timed_wait_impl<obutil::Mutex>(obutil::Mutex const&, obutil::ObSysTime const&) const from /home/admin/oceanbase/bin/observer
          #2    0x000000000b0fc7f8 in oceanbase::transaction::ObTransCond::wait(long, int&) from /home/admin/oceanbase/bin/observer
          #3    0x000000000b1175b3 in oceanbase::transaction::ObScheTransCtx::wait_end_stmt(long, long) from /home/admin/oceanbase/bin/observer
          #4    0x000000000b19e55d in oceanbase::transaction::ObTransService::rollback_stmt_(oceanbase::transaction::ObTransDesc&) from /home/admin/oceanbase/bin/observer
          #5    0x0000000004f37140 in oceanbase::transaction::ObTransService::end_stmt_v2(oceanbase::transaction::ObStmtParam const&, oceanbase::transaction::ObTransDesc&, oceanbase::transaction::ObTransExecResult const&, bool) from /home/admin/oceanbase/bin/observer
          #6    0x0000000004f34e66 in oceanbase::storage::ObPartitionService::end_stmt_v2(oceanbase::transaction::ObStmtParam const&, oceanbase::transaction::ObTransDesc&, oceanbase::transaction::ObTransExecResult const&, bool) from /home/admin/oceanbase/bin/observer
          #7    0x0000000004f0de69 in oceanbase::sql::ObSqlTransControl::end_stmt(oceanbase::sql::ObExecContext&, bool) from /home/admin/oceanbase/bin/observer
          #8    0x0000000004f0c1cf in oceanbase::sql::ObResultSet::end_stmt(bool) from /home/admin/oceanbase/bin/observer
          #9    0x0000000004f0a6a3 in oceanbase::sql::ObResultSet::close(bool) from /home/admin/oceanbase/bin/observer
          #10   0x000000000b915318 in oceanbase::observer::ObInnerSQLResult::inner_close(bool) from /home/admin/oceanbase/bin/observer
          #11   0x000000000b9030eb in oceanbase::observer::ObInnerSQLResult::force_close(bool) from /home/admin/oceanbase/bin/observer
          #12   0x000000000b906a46 in oceanbase::observer::ObInnerSQLConnection::execute(oceanbase::common::Ob2DArray<oceanbase::common::ObObjParam, 2096128, oceanbase::common::ObWrapperAllocator, false, oceanbase::common::ObSEArray<oceanbase::common::ObObjParam*, 1l, oceanbase::common::ObWrapperAllocator, false> >&, oceanbase::observer::ObInnerSQLResult&, oceanbase::observer::ObVirtualTableIteratorFactory*, bool, bool) from /home/admin/oceanbase/bin/observer
          #13   0x000000000b90be91 in oceanbase::observer::ObInnerSQLConnection::execute(unsigned long, unsigned long, oceanbase::sql::stmt::StmtType, oceanbase::common::Ob2DArray<oceanbase::common::ObObjParam, 2096128, oceanbase::common::ObWrapperAllocator, false, oceanbase::common::ObSEArray<oceanbase::common::ObObjParam*, 1l, oceanbase::common::ObWrapperAlloc
          ator, false> >&, oceanbase::common::ObISQLClient::ReadResult&, bool, bool) from /home/admin/oceanbase/bin/observer
          #14   0x000000000e2ac67b in oceanbase::sql::ObSPIService::inner_open(oceanbase::pl::ObPLExecCtx*, char const*, unsigne
          d long, long, oceanbase::common::Ob2DArray<oceanbase::common::ObObjParam, 2096128, oceanbase::common::ObWrapperAllocat
          or, false, oceanbase::common::ObSEArray<oceanbase::common::ObObjParam*, 1l, oceanbase::common::ObWrapperAllocator, fal
          se> >&, oceanbase::common::ObISQLClient::ReadResult&, oceanbase::sql::ObSPIOutParams&) from /home/admin/oceanbase/bin/
          observer
          #15   0x000000000e2a9c3a in oceanbase::sql::ObSPIService::inner_open(oceanbase::pl::ObPLExecCtx*, oceanbase::common::O
          bIAllocator&, char const*, unsigned long, long, oceanbase::sql::ObSqlExpression const**, long, oceanbase::sql::ObSqlEx
          pression const**, long, oceanbase::common::ObISQLClient::ReadResult&, oceanbase::sql::ObSPIOutParams&) from /home/admi
          n/oceanbase/bin/observer

        ```

## 关键信息

1. 会话的 state 为 `SESSION_KILLED`。
 2. obstack 可以看到堆栈卡在 `ObSQLSessionMgr::kill_session` 上。

## 问题原因

1. kill session 线程卡住的原因。

      - obstack 的信息能够看到两个线程 kill session 卡在等 Latch 上。

       ![image03](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/transaction-management/20250311kill-session-status-killed03.png)
      - kill session 需要等待锁 session lock 和 data lock，当拿到锁之后才会返回成功，所以要去诊断被 kill 的 session 为何长时间不释放锁。
 2. SQL 线程长时间无法被杀死的原因。

   常见原因如下：

      - 在事务的语句回滚时，因时间超出了事务的默认 RPC 超时时间，语句回滚失败，语句回滚失败后不断的重试，就无法释放资源。可以调整默认的 RPC 超时时间的隐藏参数 `_ob_trans_rpc_timeout` 值。

       #### 注意

       调整隐藏参数 `_ob_trans_rpc_timeout` 值，建议联系 OceanBase 数据库技术支持。
      - kill session 时事务 scheduler 可能还未创建，导致事务感知不到 session 被 kill，如果该事务执行挂住，则会导致 session 无法 kill。

## 问题的风险及影响

工作线程无法释放导致 CPU 资源无法释放、事务悬挂无法回滚导致卡转储等一系列问题。

## 影响租户

影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。

## 适用版本

OceanBase 数据库 V3.x 版本。

## 解决方法

- **通用应急方法：** 重启 session 所在节点。
 - **其他方法需具体问题具体分析，可能有用的轻量级解决方法：** 切主、转储。
 - **针对语句回滚因为 RPC 超时失败的场景：** 可以调整事务 RPC 超时时间。

## 规避方式

确认 SQL 执行卡住的根因后升级到对应修复版本即可规避 kill session 卡住的问题。

Previous

[OceanBase 数据库 V3.2.3 版本中 ob_trx_idle_timeout 失效说明](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000952902)

Next

[sched_ctx.cur_stmt_unreachable_partitions_ print 未加锁，被其他线程修改导致 core 问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002118988) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
