---
title: insert ignore 线程 hang 死问题-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于insert ignore 线程 hang 死问题相关的常见问题和使用技巧，帮助您快速解决insert ignore 线程 hang 死问题的难题。
---
切换语言

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

划线反馈

# insert ignore 线程 hang 死问题

更新时间：2026-06-08 02:36

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

## 问题现象

- `insert ignore` 与转储释放 `memtable` 并发场景下，`insert ignore` 请求卡死 (线程栈可看到无进度)，更多线程受到连带反应有可能造成整个 OBServer hang 住的情况。

     - 执行 `insert into ignore` 卡住时 `pstack` 中的异常堆栈信息

      ```shell
      oceanbase::memtable::ObITransCallback::callback(int,bool,oceanbase::memtable::ObMemtable*)()
      oceanbase::memtable::ObTransCallbackList::callback(oceanbase::memtable::ObITransCallback const*.
      oceanbase::memtable::ObITransCallback const*,int,bool,bool)()#2 xxxxxx in
      oceanbase::memtable::ObMemtableCtx::sub_stmt_end(bool)#3 xxxxx in
      oceanbase::storage::ObPartitionStorage::insert_rows_(oceanbase::storage::ObPartitionStorage::ObDMLRunningCtx&,oceanbase::common::ObNewRow const*,log,oceanBase::storage::ObRowsinfo&,oceanbase::storage::ObStoreRow*,oceanbase::storage::ObPartitionStorage::RowReshape*,long&,log&)()

      ```

## 关键诊断信息

### 触发条件

业务执行的 `insert ignore` 与转储释放 `memtable` 并发，有可能会触发该问题。

## 问题原因

- 由于 OBServer 内核实现的缺陷，在 `insert ignore` 与转储释放 `memtable` 并发的情况下，导致 OBServer 线程陷入一个内部数据结构的死循环，呈现 hang 死情况。在此时如果有持锁情况，有可能会造成更坏的影响，如 OBServer hang 死。

## 问题的风险及影响

`insert ignore` 请求卡死（线程栈可看到无进度），更多线程受到连带反应有可能造成整个 OBServer hang 住系统不可用。

## 影响的版本

- OceanBase 数据库企业版本 V3.1.2 GA（oceanbase-3.1.2-20210618150922）及之后版本、V3.2.3 GA（oceanbase-3.2.3.0-20220418212020）及之后版本、V3.2.4 GA（oceanbase-3.2.4.0-100000072022102819）及之后版本。
 - OceanBase 数据库社区版 V3.1.4_CE_BP3 (oceanbase-ce-3.1.4-103000102023020719) 之前的版本。

## 解决方法及规避方式

- 解决方法:

     - 升级至问题已修复版本,目前已修复如下版本: OceanBase 数据库企业版 V3.2.3 BP7 (oceanbase-3.2.3.3-107000092023011911) 及之后版本、V3.2.4 BP1 (oceanbase-3.2.4.1-101000052023010822) 及之后版本。
     - OceanBase 数据库社区版 V3.1.4_CE_BP3 (oceanbase-ce-3.1.4-103000102023020719) 及之后版本。
     - 不使用 insert `ignore`，使用 `replace` 语句替代, 举例如下。

      ```shell
      insert ignore into table_name(a,b) values('abc',28);  

      ```

      用 `replace` 替代 `ignore` 则

      ```shell
      insert replace into table_name(a,b) values('abc',28);

      ```
     - 应急手段：问题发生时可尝试 stop observer，将主切走后重启 OBServer 来应急。详细信息可以参考 [停止或启动 OBServer](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355936)。

上一篇

[如何防止 observer 进程被系统 OOM Killer 杀死？](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207692)

下一篇

[OBServer 服务器重启后 observer 进程未能自动启动](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000210133) ![有帮助](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) 咨询热线
