Django 踩坑记:OceanBase 4012 Timeout 两条红线,语句超时 vs 事务超时一次讲透

作者:哈里谢顿日期:2026/1/16

一、4012 是谁抛的?

Django 本身没有 4012 错误码,它是 OceanBase 的“杀手”信号:

当前 SQL 当前事务累计执行时间 ≥ 系统阈值,直接返回 4012。


二、两条红线长啥样?

变量名默认阈值计时对象触发后果
ob_query_timeout10 000 000 µs = 10 s单条 SQL 执行时长这条语句被杀,事务可继续
ob_trx_timeout100 000 000 µs = 100 s事务 begin→commit 总时长下一条语句必 4012,事务必须回滚

谁先撞线谁动手,互不插队。


三、Django 视角看区别

1. 语句超时——只掐“这一条 SQL”

1# 视图里甚至没开事务
2from django.db import connection
3
4def stmt_timeout_demo(request):
5    with connection.cursor() as c:
6        c.execute("SET SESSION ob_query_timeout = 1_000_000")  # 1 s
7        c.execute("SELECT SLEEP(3)")        # 单条 SQL 执行 3 s  4012
8    return HttpResponse("ok")
9

现象SLEEP(3) 还没跑完,OceanBase 直接返回 4012,Django 抛 OperationalError,事务不存在,照样杀。

2. 事务超时——掐“begin 到 commit”的总时长

1from django.db import transaction
2import time
3
4@transaction.atomic
5def trx_timeout_demo(request):
6    from app.models import Order
7    Order.objects.filter(id=1).update(status=1)  # 0.1 s
8    time.sleep(11)                               # 业务睡了 11 s
9    Order.objects.filter(id=2).update(status=1)  # 事务已存活 > 10 s  4012
10

现象:第 2 条 update 刚发出去就收到 4012,Django 自动回滚整个事务,再抛 OperationalError


四、本地复现完整脚本

把下面代码保存为 test_4012.pypython manage.py shell 里直接跑:

1import os, django
2os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
3django.setup()
4
5from django.db import connection
6
7def trigger_4012():
8    with connection.cursor() as cur:
9        # 1. 把两条阈值都改成 1 s(单位 µs)
10        cur.execute("SET SESSION ob_query_timeout = 1_000_000")
11        cur.execute("SET SESSION ob_trx_timeout   = 1_000_000")
12        print("阈值已设为 1 s")
13
14        # 2. 开启事务
15        cur.execute("BEGIN")
16
17        # 3. 故意跑 3 s,触发语句超时
18        try:
19            cur.execute("SELECT SLEEP(3)")
20        except Exception as e:
21            print("语句超时 →", e)
22
23        # 4. 再试一次,触发事务超时
24        try:
25            cur.execute("SELECT 1")
26        except Exception as e:
27            print("事务超时 →", e)
28        finally:
29            cur.execute("ROLLBACK")
30
31if __name__ == '__main__':
32    trigger_4012()
33

运行结果示例

1阈值已设为 1 s
2语句超时  (4012, 'Timeout')
3事务超时  (4012, 'Timeout')
4

两条红线一次体验齐活。


五、如何调大阈值

1-- 全局生效(需 OB 超管)
2SET GLOBAL ob_query_timeout = 60_000_000;   -- 60 s
3SET GLOBAL ob_trx_timeout   = 86400_000_000; -- 24 h
4

或者只在 Django 当前连接生效:

1'OPTIONS': {
2    'init_command': "SET ob_query_timeout=60_000_000, ob_trx_timeout=86400_000_000",
3}
4

六、一句话总结

4012 不是 Django 的锅,而是 OceanBase 的两条“红线”:

  • 语句超时掐单条 SQL 执行时长;
  • 事务超时掐 begin→commit 总时长。
    搞清谁先撞线,定位改阈值还是拆事务,下次再见到 4012 就能秒解。

Django 踩坑记:OceanBase 4012 Timeout 两条红线,语句超时 vs 事务超时一次讲透》 是转载文章,点击查看原文


相关推荐


HarmonyOS一杯冰美式的时间 -- @Env
猫猫头啊2026/1/8

一、前言 该系列依旧会带着大家,了解,开阔一些不怎么热门的API,也可能是偷偷被更新的API,也可以是好玩的,藏在官方文档的边边角角~当然也会有一些API,之前是我们辛辛苦苦的手撸代码,现在有一个API能帮我们快速实现的,希望大家能找宝藏。 如果您有任何疑问、对文章写的不满意、发现错误或者有更好的方法,欢迎在评论、私信或邮件中提出,非常感谢您的支持。🙏 二、@Env的诞生背景 OK,步入正题把,在多设备开发的场景中,我们经常需要根据不同的设备环境(比如窗口大小、横竖屏等)来调整UI布局。以前我


Nop入门:使用Excel模板生成包含图表的报表
canonical_entropy2025/12/30

讲解视频:Nop入门:使用NopReport导出Excel图表_哔哩哔哩_bilibili Nop平台内置了一个非常精简的中国式报表引擎NopReport,它可以实现商业报表引擎如FineReport和润乾报表的核心功能。NopReport很巧妙的利用Excel单元格的批注机制来存放扩展信息,可以直接使用Excel模板来作为报表模板,这样大大简化了报表制作过程,并且可以复用客户已有的各种业务表格。 在实现层面,NopReport没有使用Apache POI库,而是选择了直接使用流式接口解析Off


什么?还不知道git cherry pick?
少年姜太公2025/12/21

前言 上周四在公司开发代码时,一下没注意从测试分支dev上拉了代码并进行开发,最后要上线的时候才猛然发现分支拉错了,一看gitLab上改了几十个文件,再一查发现自己拉代码拉错了😭😭😭,本来都准备下班了,结果硬是新建了一个分支,把四五个文件近1000行代码一点一点cv到新分支上,结果搞完一查才发现git有个cherry pick的命令可以直接搞完,希望jym看完这篇文章以后不要像我一样做这种一点一点cv的蠢事了😭😭😭 什么是cherry pick cherry pick顾名思义,就是樱


【鸿蒙开发案例篇】拒绝裸奔!鸿蒙6实现PDF动态加密
威哥爱编程2025/12/13

兄弟们抄起键盘!今天V哥要带大家用鸿蒙6.0的pdfService玩转PDF动态加密,让敏感文档在战场上穿隐身衣。以下基于HarmonyOS 6.0(API 21)的ArkTS实战,全程高能代码爆破,专治数据泄露不服!💣 联系V哥获取 鸿蒙学习资料 🔑 第一弹:动态加密核心战备(理论基础) 作战目标:运行时根据设备状态动态加载/更新PDF加密密钥技术依据: pdfService支持通过setEncryptConfig()对文档进行AES-256加密 加密状态可通过getSecurityH


TRAE SOLO 驱动:重构AI模拟面试产品的复盘
HiStewie2025/12/4

面试是一项技能,而任何技能的进阶都离不开“高频练习”与“即时反馈”这两个核心要素。 传统的面试准备往往陷入两个极端:要么对着镜子自言自语,缺乏客观的第三方视角;要么花重金找导师模拟,成本高昂且难以常态化。技术存在的意义,就是用低边际成本解决高频痛点。 但这其实并不是我第一次尝试解决这个问题。在此之前,我曾开发过一个初版工具:(QuizPort1.0 让每篇好文都有测验陪跑) 当时的思路很线性:抓取技术文章 →\rightarrow→ AI 提炼知识点 →\rightarrow→ 生成文字面试题


VS code 类产物中 win11 终端字体内容和颜色 加粗不匹配问题
小兵张健2026/1/24

我尝试了各种方式,换字体,改配置,结果还是乱的,有人知道怎么搞吗?跪求,Mac好像天然就没问题,急急急大佬们

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客