---
title: 事务内部语句超时回滚 -OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于事务内部语句超时回滚 相关的常见问题和使用技巧，帮助您快速解决事务内部语句超时回滚 的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 事务内部语句超时回滚

更新时间：2023-11-14 03:16

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

在 OceanBase 数据库中，如果 ob_trx_idle_timeout（即事务内两条 SQL 的间隔）设置的过小的话，可能会造成事务回滚。本文介绍事务回滚的原因以及解决方法。

## 适用版本

OceanBase 数据库所有版本

## 问题现象

执行以下 SQL 语句，开启一个事务。

```unknow
obclient> CREATE TABLE test (id1 int);
obclient> SET @@ob_query_timeout=200 * 1000 * 1000;
obclient> SET @@ob_trx_timeout = 200 * 1000 * 1000;

begin;
insert into test values(1);

```

等待 150 秒，再执行以下语句。

```unknow
obclient> INSERT INTO test VALUES(2);
obclient> SELECT * FROM test;
obclient> ROLLBACK;

```

在执行 `INSERT INTO test VALUES(2)` 时，会提示 `Lost connection`；而 `SELECT * FROM test` 语句的结果为空，表示上述事务已经回滚。

## 可能原因

这是由于事务内两条SQL间隔如果超过 `ob_trx_idle_timeout`，OceanBase 数据库端内部会强制停止会话，断开与客户端的链接，同时回滚事务，默认为 120s。不建议修改该系统变量，有关该系统变量的详细信息，请参见《OceanBase 数据库 参考指南》中的 **系统变量** 章节。

`ob_trx_idle_timeout` 的取值范围为 [100s,+∞)。如果设置的值小于 100s，则该变量不会生效，事务超时时间仍为 120s。

因此问题可能是由于会话中将 `ob_trx_idle_timeout` 设置得过小。

## 规避方式

OceanBase 数据库为解决长事务与悬挂事务引入了 `ob_trx_idle_timeout` 系统变量，该系统变量不建议修改。如果确实需要修改该变量，请联系 OceanBase 技术支持进行咨询。

Previous

[应用报错：Transaction resolution unknown](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000322510)

Next

[Transaction is timeout 异常的原因和说明](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000267169) ![有帮助](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) 咨询热线
