首批通过分布式安全可靠测评,为关键业务系统打造
temp table 计划执行异常一段时间后租户内存不足并且无法释放
更新时间:2026-05-08 06:21
问题现象
计划中可以看到 temp table insert 算子,计划在执行过程中异常退出(例如超时退出),多次异常执行后,租户内存不足,查看该 gv$memory 视图可以发现 SqlTempTableRow 模块占据很多内存。
查看语句如下。
select * from gv$memory order by used desc limit 1\G
TENANT_ID: 1002
IP: 192.xxx.x.xx
PORT: 2882
CONTEXT: SqlTempTableRow
COUNT: 52877
USED: 3465347072
ALLOC_COUNT: 0
并且租户的内存无法手动释放,只能通过重启集群释放。
问题原因
查询异常退出时算子未释放内存。
问题的风险及影响
导致租户内存不足,并且无法释放,影响其他业务 SQL 执行。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响的版本
V3.2.3 GA(oceanbase-3.2.3.0-20220418212020)及之后版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V3.2.3 BP6(oceanbase-3.2.3.3-106000102022111521)及之后版本。
如果已经发生泄漏只能通过重启集群释放内存。
如果泄漏的内存不多,不影响业务,并且业务不允许重启集群,可以通过
hint绑定计划,绕过temp table insert算子。具体hint需要根据业务 SQL 给出。