存储过程中,开启事务,出现HY000: Transaction context does not exist

版本:4.3.5社区版mysql模式

在存储过程中,开启事务,执行到一个insert…select…的语句中,会有“HY000: Transaction context does not exist”异常,这个语句的数据量大约在20W左右,执行时间在20分钟左右。
这个异常有时候会有,有时候没有。
日志中有“log_task life cost too much time”,这个是写入日志导致超时产生切主而产生的问题吗?

1 个赞

把具体的observer.log 发一下

2 个赞

1 个赞

用敏捷诊断工具分析一下日志看看,文档:https://www.oceanbase.com/docs/common-obdiag-cn-1000000002488226

1 个赞

尽量完整的日志文件 压缩发一下 主要日志的前后文信息 看不到 没法分析

1 个赞

observer.zip (29.0 MB)
老师好,这个是完整日志,您看一下

1 个赞

存储过程保存到文本里 也发一下

1 个赞

存储过程.txt (20.7 KB)
老师您看一下这个存储过程,在最后一个“insert ignore etlgck.qxgc_zx_zxjbxx_jbxx_hz_0300”的这个地方会出错,这个insert大约会有20W数据,qxk.sjqx_qxk_ztmkmx_log_01这种子存储过程是存储日志的,您可以忽略

1 个赞

老师,请问这个能分析出原因是什么吗

1 个赞

目前还在分析 后面有结果了会给你回复

1 个赞

好的,谢谢老师!!

1 个赞

根据46757698 在10.10.100.14这个节点上 搜一下 大概这个时间段的2025-03-17 13:35:05.174399 observer.log日志文件

1 个赞

这个信息也查看一下
SELECT VALUE4 HAPPENED_TIME,svr_ip,VALUE1 TENANT_ID,VALUE2 LS_ID,event,name3,value3 FROM DBA_OB_SERVER_EVENT_HISTORY WHERE module=“ELECTION”;

1 个赞

sys租户_迁移历史.zip (100.4 KB)
老师您好,这个是查询结果,您看一下

1 个赞


老师您好,这个点在上次我发给您的那个日志中可以查到,这个显示“fail to exec spi_query”,我查看资料,发生这个报错的原因也有很多,可以麻烦您再帮我们定位的具体一点吗?

1 个赞

根据grep 46757698 在10.10.100.14这个节点上 搜一下 大概这个时间段的2025-03-17 13:35:05.174399 observer.log日志文件


老师您好,这个日志现在已经找不到了,已经被OB定期清理了,现在最早只有这个时间点的日志了!

看到这个时间 有切主 切主触发迁移事务到新 Leader 的过程中,语句尚未执行结束 导致的事务回滚了
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013091

那这个日志能分析出他为什么会切主吗?如果避免不了切主,那是不是代表长事务、执行时间较长的sql,都会执行失败呢?

你把三个节点的大概这个时间段的2025-03-17 13:35:05.174399的rootservice.log日志发一下
这些参数查一下 注意字符转义
show parameters where name in (‘memory_limit’,‘memory_limit_percentage’,‘system_memory’,‘log_disk_size’,‘log_disk_percentage’,‘datafile_size’,‘datafile_disk_percentage’);