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

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

划线反馈

# kill session 失败原因分析

更新时间：2026-08-25 02:41

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

## 问题现象

**触发场景**

在部署了多个 ODP（OceanBase Database Proxy）节点的集群环境中，从一个 ODP 节点登录数据库后，尝试终止（Kill）另一个 ODP 节点上所建立的会话。

**具体表现**

执行 `KILL` 命令时，返回错误信息 `ERROR 1094 (HY000): Unknown thread id`，表明无法识别指定的会话 ID。

```sql
kill 3221688065;
ERROR 1094 (HY000): Unknown thread id: 3221688065

```

**影响范围**

异常的数据库会话无法被正常终止，可能导致会话持续占用数据库连接、内存等资源。

**发生频率**

此问题在所述场景下**必现**。根本原因在于会话标识 `cs_id` 仅在单个 ODP 节点内部唯一。

## 问题原因

**根因分析**

ODP 为每个客户端会话分配一个 `cs_id`（Client Session ID），此 ID 仅在单个 ODP 节点内部保证唯一性。当从一个 ODP 节点执行 `KILL` 命令时，命令基于当前 ODP 节点维护的 `cs_id` 列表进行查找。由于目标会话位于另一个 ODP 节点，其 `cs_id` 不在当前节点的管理范围内，因此无法匹配，导致 `KILL` 操作失败。

**技术原理**

下表对比了不同会话标识的唯一性及其在 `KILL` 命令中的可用性：

| 标识 | 唯一性 | Kill 命令可用性 |
| --- | --- | --- |
| cs_id | ODP 节点内唯一 | 仅对当前 ODP 节点上的会话有效 |
| server_sessid | OBServer 侧全局唯一 | **推荐用于跨 ODP 节点的 Kill 操作** |
| proxy_sessid | 全局唯一 | 主要用于会话链路追踪和关联 |

**已知问题 / Bug**

此现象属于**设计使然**（By Design），并非软件缺陷。

## 关键信息

**诊断 SQL**

1. 查询目标会话在 OBServer 侧的 `server_sessid` 及其所在的服务器信息：

   ```sql
   SELECT id, svr_ip, svr_port
   FROM oceanbase.__all_virtual_processlist
   WHERE tenant = '<your_tenant_name>';

   ```

   > **说明**：此查询中的 `id` 列即为 `server_sessid`。
 2. 查看当前 ODP 会话的属性映射关系：

   ```sql
   SHOW PROXYSESSION ATTRIBUTE;

   ```

## 问题的风险及影响

| 评估维度 | 影响评估 |
| --- | --- |
| 业务影响 | 中（异常会话无法及时清理，持续占用资源） |
| 系统风险 | 中（在紧急运维场景下，可能被误判为系统级故障） |
| 数据丢失 | 无 |

## 适用版本

- OBServer 3.x
 - OBServer 4.x

> **注意**：不同 OBServer 版本中，`SHOW PROCESSLIST` 和 `__all_virtual_processlist` 视图的 `Id` 列含义可能不同。例如，在 4.2.1 版本中代表 `server_sessid`，而在 4.3.5 版本中可能代表 `cs_id`。实际操作前请确认版本信息。

## 解决方法

### 方法一：直连目标 OBServer 执行 Kill

此方法通过直接连接承载目标会话的 OBServer 来执行终止操作。

1. **定位目标会话与服务器** 在 sys 租户下，查询异常会话的 `server_sessid` 及其所在的 OBServer 地址。

   ```sql
   SELECT id AS server_sessid, svr_ip
   FROM oceanbase.__all_virtual_processlist
   WHERE tenant = '<your_tenant_name>';

   ```
 2. **直连 OBServer 并执行 Kill** 使用获取到的 `server_sessid` 和 OBServer IP，直连其 MySQL 端口（默认 2881）执行 `KILL` 命令。

   ```bash
   mysql -h <observer_ip> -P2881 -uroot@<tenant>#<cluster> -p -A -c

   ```

   连接成功后，执行：

   ```sql
   KILL <server_sessid>;

   ```

### 方法二：登录目标会话所在的 ODP 节点执行 Kill

如果明确知道目标会话是由哪个 ODP 节点代理的，可以直接登录该 ODP 节点，使用其内部的 `cs_id` 来终止会话。

**操作前提**：已知目标会话所在的 ODP 节点地址及该会话在该节点上的 `cs_id`。

**操作步骤**：登录该 ODP 节点后，执行 `KILL <cs_id>;`。

> **说明**：对于单 ODP 节点的集群环境，不存在跨节点问题，直接使用 `KILL` 命令即可。

**回滚方案**

`KILL` 操作本身不可回滚。会话被终止后，对应的客户端连接会断开。应用侧需要具备连接重试和事务重试机制。

## 规避方式

1. **统一使用 `server_sessid` 进行会话管理**：在需要跨 ODP 节点管理会话（如监控、运维脚本）时，优先查询并使用 `__all_virtual_processlist` 中的 `id`（即 `server_sessid`）作为会话标识。
 2. **规范运维操作**：在分布式部署环境中，明确会话管理职责，避免从一个代理节点管理其他代理节点的会话。
 3. **完善监控告警**：将会话级指标（如长事务、空闲连接）纳入监控，并关联 ODP 节点信息，便于快速定位问题源头。

上一篇

[OB 2.2.77 NTP 时钟偏移过大导致 OBServer 节点不工作](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000006871007)

下一篇

[数据库 DATETIME 字段时间精度变更 DDL 机制](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000006802569) ![有帮助](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) 咨询热线
