---
title: 迁移 Unit 后 plan cache 内存泄漏-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于迁移 Unit 后 plan cache 内存泄漏相关的常见问题和使用技巧，帮助您快速解决迁移 Unit 后 plan cache 内存泄漏的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 迁移 Unit 后 plan cache 内存泄漏

更新时间：2026-06-10 09:46

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

## 问题现象

1. 某租户 Unit 从某台机器上迁移后, 该租户在当前机器上 `OB_SQL_PHY_PLAN` 这个 mod 内存使用仍不断增加, 直至超过租户内存大小，您可以通过如下命令查看。

   ```shell
   obclient> select tenant_id, svr_ip, svr_port, mod_name, hold, used from oceanbase.__all_virtual_memory_info where tenant_id = 'xxx' and label = 'OB_SQL_PHY_PLAN' order by hold desc limit 20;

   ```
 2. 日志中可以看到，内部请求出现 -4013 报错。
 3. 可能出现合并卡住等内部任务失败的情况。

## 关键诊断信息

### 触发条件

Unit 迁移。

### 事前巡检

1. 查看是否有做过 Unit 迁移。

   ```shell
   select * from oceanbase.__all_rootservice_job where job_type = 'MIGRATE_UNIT';

   ```
 2. 查看 Unit 迁移后，机器上被迁走的租户内存是否存在 `OB_SQL_PHY_PLAN` 占用很高的问题，可考虑对该内存增长情况进行监控。

   ```shell
   select tenant_id,svr_ip,svr_port,mod_name,hold,used from oceanbase.__all_virtual_memory_info where tenant_id = 'xxx' and label = 'OB_SQL_PHY_PLAN' order by hold desc limit 20;

   ```

### 事后诊断

1. 确认是否做过 Unit 迁移。

   ```
 2. 机器上被迁走的租户内存是否存在 `OB_SQL_PHY_PLAN` 占用很高的问题。

   ```

## 问题原因

租户 Unit 从 A 机器迁移到 B 机器后，A 机器上租户对应 plan cache 释放但并没有删除，设置为 `invalid` 状态。当内部切租户在 A 机器上执行 A 租户请求时，生成的执行计划不会加入到 plan cache 中。当请求结束，需要将 plan 对象 free 时，会先看 plan cache 中是否有该 plan，发现没有，后面没有再执行真正的 free 动作，导致 plan 内存没有释放，出现内存泄漏。

## 问题的风险及影响

1. 会持续内存泄漏，直至泄漏量为被迁移租户内存大小，可能导致机器内存不足。
 2. 当内存泄露到租户内存上限，内部依赖切租户执行的任务可能会失败，比如刷 location、刷 schema、合并以及在 RS 节点上各种需要切租户执行的 SQL 可能会失败，从而导致内部相关任务失败，最终可能影响业务执行请求。

## 影响租户

影响 OceanBase 数据库中的 Oracle 租户和 MySQL 租户，对于 SYS 租户无影响。

## 影响版本

OceanBase 数据库 V3.1.2 GA（oceanbase-3.1.2-20210618150922）及之后版本、V3.2.3 GA（oceanbase-3.2.3.0-20220418212020）及之后版本、V3.2.4 GA（oceanbase-3.2.4.0-100000072022102819）及之后版本

## 解决方法

1. 重启内存泄漏的 OBServer。
 2. 升级到问题已修复版本，目前已修复的版本包含 OceanBase 数据库 V3.2.3 BP10（oceanbase-3.2.3.3-110000092023091219）及之后版本、V3.2.4 BP5（oceanbase-3.2.4.5-105000012023081513）及之后版本。

## 规避方式

在升级到已修复该问题的版本前，做完 Unit 迁移后，对 Unit 迁移前所在的 OBServer 进行重启。

Previous

[新增副本因磁盘空间不足抛出报错 IO_ERROR 的原因和解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002397821)

Next

[UNIT_NUM 扩容后，磁盘数据未均衡的原因和解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001229424) ![有帮助](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) 咨询热线
