---
title: SPM 基线自动清理说明-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 SPM 基线自动清理说明相关的常见问题和使用技巧，帮助您快速解决 SPM 基线自动清理说明的难题。
---
切换语言

- 简体中文
- English

划线反馈

# SPM 基线自动清理说明

更新时间：2026-05-15 09:06

适用版本： V4.2.x、V4.3.x、V4.4.x 内容类型：TechNote  

对于开启 SPM 功能的租户，随着业务变更、动态查询等原因可能保留了大量已经不再使用的基线，这些基线的数量会随着时间积累而增长。 OceanBase 能够自动定期清理这些基线，并对不再使用基线保留的时间进行设置。

## 详细说明

对于开启 SPM 功能的租户，数据库中执行过的查询会自动添加基线（在 V4.2.5 BP4、V4.3.5 BP4、V4.4.1 及之后的版本，计划在 plan cache 中保留且执行超过 150 次会添加基线，这些版本之前的版本，计划成功执行一次就会添加基线）。 如果业务存在频繁变更、存在大量动态查询等情况，数据库中会保留了大量已经不再使用的基线，这些基线的数量会随着时间积累而增长。 为了避免大量不再使用的基线占用磁盘空间、对 SPM 功能正常执行造成影响，OceanBase 实现了自动基线清理功能，每天凌晨 1:00 执行定时任务，调用 `DBMS_SPM.AUTO_PURGE_SQL_PLAN_BASELINE` 对长时间不再使用基线进行清理。 基线保留时间可以通过以下方式进行查询和配置，早期版本默认保留一年时间的基线（即 53 周），较新版本将这一默认值调整为了 7 周，从低版本升级的版本仍保留原始设置，升级后可以根据需要进行配置。建议保留基线时间在一个月以上，避免月结、跑批等查询等基线被清理。

```shell
-- oracle 模式设置及查询基线保留时间
call DBMS_SPM.CONFIGURE('plan_retention_weeks', 5);
select * from sys.DBA_SQL_MANAGEMENT_CONFIG where PARAMETER_NAME = 'PLAN_RETENTION_WEEKS';
+----------------------+-----------------+----------------------------+-------------+
| PARAMETER_NAME       | PARAMETER_VALUE | LAST_MODIFIED              | MODIFIED_BY |
+----------------------+-----------------+----------------------------+-------------+
| PLAN_RETENTION_WEEKS | 5               | 2025-09-19 11:12:40.231801 | TEST        |
+----------------------+-----------------+----------------------------+-------------+

-- MySQL 模式设置及查询基线保留时间
call DBMS_SPM.CONFIGURE('test', 'plan_retention_weeks', 5);
select * from oceanbase.DBA_SQL_MANAGEMENT_CONFIG where PARAMETER_NAME = 'PLAN_RETENTION_WEEKS';
+----------------------+-----------------+----------------------------+-------------+
| PARAMETER_NAME       | PARAMETER_VALUE | LAST_MODIFIED              | MODIFIED_BY |
+----------------------+-----------------+----------------------------+-------------+
| PLAN_RETENTION_WEEKS | 5               | 2025-09-19 11:12:20.539905 | test        |
+----------------------+-----------------+----------------------------+-------------+

```

V4.2.1 版本在 V4.2.1 BP11 Hotfix10 之后具备基线自动清理功能，但从低版本升级到 V4.2.1 BP11 Hotfix10 的租户，需要进行以下操作进行检查。

1. 检查并确认是否存在相关系统包，如果不存在，需要手动升级系统包。

   ```shell
   -- 执行以下查询，如果执行报错 FUNCTION DBMS_SPM.AUTO_PURGE_SQL_PLAN_BASELINE does not exist, 先确认 421 版本是否支持，如果版本已经支持，需要手动升级系统包
   select DBMS_SPM.AUTO_PURGE_SQL_PLAN_BASELINE() from dual;

   -- 手动升级系统包，直连到集群中某个server,系统租户下执行如下命令
   alter system set enable_upgrade_mode =true;
   set ob_compatibility_mode='oracle';
   set ob_query_timeout = 300000000;
   CALL "__DBMS_UPGRADE".UPGRADE_ALL();
   set ob_compatibility_mode='mysql';
   alter system set enable_upgrade_mode = false;

   ```
 2. 检查是否存在清理基线的定时任务，如果不存在，需要手动创建定时任务。

      - Oracle 模式下，在业务租户租户下创建定时任务（维护窗口）：

       ```shell
       -- 查看创建的定时任务
       select * from DBA_SCHEDULER_JOBS where JOB_NAME = 'SPM_STATS_MANAGER'\G

       BEGIN
       DBMS_SCHEDULER.CREATE_JOB(
       job_name        => 'SPM_STATS_MANAGER',
       job_type        => 'STORED_PROCEDURE',
       job_action      => 'DBMS_SPM.HANDLE_SPM_STATS_JOB_PROC()',
       start_date      => '2025-09-20 01:00:00.000000', -- 设置为次日 1:00，创建时需要调整该值
       repeat_interval => 'FREQ=DAYLY; INTERVAL=1',
       end_date        => '4000-01-01 00:00:00.000000',
       enabled         => true,
       auto_drop       => false,
       comments        => 'used to handle spm stats',
       max_run_duration => 3600);
       END;
       /

       ```
      - MySQL 模式下，在系统租户下，为业务租户创建定时任务（维护窗口）：

       ```shell
       -- 在 sys 租户下切换操作业务租户的内部表
       alter system change tenant tenant_id = 1004;

       -- 确认以下查询结果为空，即不存在 SPM_STATS_MANAGER job
       select * from __all_tenant_scheduler_job where job_name = "SPM_STATS_MANAGER"\G

       -- 获取需要添加的 job 号
       select max(job) + 1 into @next_job from __all_tenant_scheduler_job;
       -- 设置 job 开始时间, 后续每天这个时刻自动执行任务
       set @start_time = '2025-09-25 01:00:00';	-- 设置为次日 1:00, 创建时需要调整该值

       -- 在内部表创建 job
       INSERT INTO __all_tenant_scheduler_job( tenant_id, job_name, job, lowner, powner, cowner, next_date,total,`interval#`,flag,what,nlsenv,field1,exec_env,job_style,program_name,job_type,job_action,number_of_argument,start_date,repeat_interval,end_date,job_class,enabled,auto_drop,comments,credential_name,destination_name,interval_ts,max_run_duration)
       VALUES
       (0, "SPM_STATS_MANAGER", @next_job, "root@%", "root@%", "oceanbase", @start_time, 0, "FREQ=DAYLY; INTERVAL=1", 0, "DBMS_SPM.HANDLE_SPM_STATS_JOB_PROC()", "", "", "281018368,45,45,45,2,", "REGULER", "", "STORED_PROCEDURE", "DBMS_SPM.HANDLE_SPM_STATS_JOB_PROC()", 0, @start_time, "FREQ=DAYLY; INTERVAL=1", usec_to_time(64060560000000000), "DEFAULT_JOB_CLASS", 1, 0, "used to handle spm stats", "", "", 86400000000, 3600),
       (0, "SPM_STATS_MANAGER", 0, "root@%", "root@%", "oceanbase", @start_time, 0, "FREQ=DAYLY; INTERVAL=1", 0, "DBMS_SPM.HANDLE_SPM_STATS_JOB_PROC()", "", "", "281018368,45,45,45,2,", "REGULER", "", "STORED_PROCEDURE", "DBMS_SPM.HANDLE_SPM_STATS_JOB_PROC()", 0, @start_time, "FREQ=DAYLY; INTERVAL=1", usec_to_time(64060560000000000), "DEFAULT_JOB_CLASS", 1, 0, "used to handle spm stats", "", "", 86400000000, 3600);

       ```

## 适用版本

OceanBase 数据库 V4.2.1 BP11 Hotfix10（oceanbase-4.2.1.11-111100012025092309）及之后版本、V4.2.5 BP4（oceanbase-4.2.5.4-104000082025052817）及之后版本、V4.3.5 BP2 Hotfix9（oceanbase-4.3.5.2-102090012025082611）及之后版本、V4.3.5 BP3 Hotfix2（oceanbase-4.3.5.3-103020012025082017）及之后版本、V4.3.5 BP4（oceanbase-4.3.5.4-104000052025090918）及之后版本、V4.4.1（oceanbase-4.4.1.0-100000242025092415）及之后版本。

Previous

[子查询合并改写不对](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002761475)

Next

[优化器无法准确评估包含 LOB 列访问的 SQL 执行代价导致计划选错](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000006405842) ![有帮助](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) 咨询热线
