【 使用环境 】 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】delete from tif_vouchinfo b where exists (select 1 from tif_transinfo a where a.vc_acct_wm = ‘XXX’ and b.l_date >=a.l_bus_date) 删除大概一千万的数据 报 transcation is killed
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
1 个赞
在尝试通过 DELETE
语句删除大量数据时遇到 transcation is killed
错误,这通常是因为事务超时或资源不足导致的。对于 OceanBase 数据库来说,一次删除一千万条记录的事务非常大,可能超过系统默认的事务大小限制。为了避免此类错误,建议您采取以下措施:
-
分批删除:通过
WHERE
子句分批次删除数据,而不是一次性删除所有数据。 -
使用
TRUNCATE TABLE
:如果不需要记录删除操作的日志,可以考虑使用TRUNCATE TABLE
语句来快速清空表。 - 调整事务超时时间:如果确实需要一次性删除大量数据,可以考虑调整事务超时时间,但这需要谨慎操作,避免影响其他业务。
示例分批删除语句:
obclient [test]> DELETE FROM tif_vouchinfo WHERE EXISTS (SELECT 1 FROM tif_transinfo a WHERE a.vc_acct_wm = 'XXX' AND b.l_date >= a.l_bus_date) LIMIT 10000;
重复执行上述语句,直到没有更多记录被删除。
如果您需要进一步的帮助,建议收集诊断信息并联系技术支持。
具体信息可参考以下文档:
调整一下ob_trx_timeout试试