---
title: PS 与 SPM 场景下 SQL 请求持续硬解析并报错 -4003-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于PS 与 SPM 场景下 SQL 请求持续硬解析并报错 -4003相关的常见问题和使用技巧，帮助您快速解决PS 与 SPM 场景下 SQL 请求持续硬解析并报错 -4003的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# PS 与 SPM 场景下 SQL 请求持续硬解析并报错 -4003

更新时间：2026-07-17 07:16

适用版本： V4.4.x 内容类型：Troubleshoot  

## 问题现象

当满足以下两个条件时，会出现 SQL 请求无法命中执行计划，并持续进行硬解析的现象：

1. 集群已开启 SPM（SQL Plan Management）。
 2. 执行的 Prepare Statement（PS）语句中包含**不可被参数化**的参数。

**不可参数化参数的示例：**

- `SELECT * FROM t1 WHERE a = ? ORDER BY ?`：`ORDER BY` 子句中的参数不可参数化。
 - `SELECT * FROM t1 WHERE STR_TO_DATE(?, ?)`：`STR_TO_DATE` 函数的第二个参数不可参数化。

此时，在 OceanBase 日志中会持续观察到以下错误信息：

```javascript
[2025-10-14 18:10:21.173238] WDIAG [SQL] handle_physical_plan (ob_sql.cpp:5191) [1611416][T1032_L0_G0][T1032][YB420A6A256A-0006411C5D4FE330-0-0] [lt=0][errcode=-5434] fail to add spm plan to plan cache(ret=-5434)
[2025-10-14 18:10:21.173248] WDIAG [SQL] handle_ps_execute (ob_sql.cpp:2476) [1611416][T1032_L0_G0][T1032][YB420A6A256A-0006411C5D4FE330-0-0] [lt=7][errcode=-5434] fail to handle physical plan(ret=-5434)
...
[2025-10-14 18:10:21.175436] EDIAG [LIB] operator[] (ob_se_array.h:308) [1611416][T1032_L0_G0][T1032][YB420A6A256A-0006411C5D4FE330-0-0] [lt=7][errcode=-4003] idx out of range(idx=0, count_=0) BACKTRACE:0x243c5665...
[2025-10-14 18:10:21.175458] WDIAG [SQL.PC] match (ob_plan_cache_value.cpp:1654) [1611416][T1032_L0_G0][T1032][YB420A6A256A-0006411C5D4FE330-0-0] [lt=16][errcode=-4003] fail to get ps param(not_param_info_[i].idx_=1817, ret=-4003)
...

```

## 关键信息

### 触发条件

1. 租户开启了 SPM 功能。
 2. 执行的 PS 语句中包含不可被参数化的参数。

### 事前巡检

在业务上线前，建议进行以下检查：

- 检查上线的业务中，PS 语句是否包含不可被参数化的参数。
 - 确认相关租户是否开启了 SPM 功能。

### 事后诊断

在 OceanBase 日志中搜索以下关键字： `[errcode=-4003] fail to get ps param`

诊断特征：

- 日志中会先出现 `-5434` 错误码的报错。
 - 随后立即出现 `-4003` 错误码的报错。
 - 此类错误日志会大量、频繁地出现。

## 问题原因

在 SPM 进行计划演进的过程中，对于包含不可参数化参数的 PS 语句，Plan Cache 所依赖的部分状态信息未能被正确设置。这导致该 SQL 的执行计划在尝试加入 Plan Cache 时失败，并报错 `-4003`。

Plan Cache 在处理此错误时，会清理该 SQL ID 对应的整个 Cache Node。其后果是，该 SQL 对应的物理计划始终无法成功加入 Plan Cache，每次执行都需要进行硬解析。

## 问题风险及影响

1. **性能影响**：在开启 SPM 的集群中，包含不可参数化参数的 PS 语句将无法使用 Plan Cache，导致每次请求都需要硬解析。不过，此类语句在生产环境中通常较少，对整体系统性能影响有限。
 2. **日志影响**：日志中会频繁打印 `-4003` 错误信息。

## 影响范围

### 影响租户

| 租户模式 | 是否受影响 |
| --- | --- |
| SYS 租户 | 是 |
| MySQL 租户 | 是 |
| Oracle 租户 | 是 |

### 影响版本

| 影响版本 | 开始版本 | 修复的 BP 版本 | （区间内）修复的 Hotfix 版本 |
| --- | --- | --- | --- |
| 4.2.5 | 4.2.5.5-BP5-105000052025070822 | 4.2.5.7-BP7-107000092025103121 | 4.2.5.6-BP6 hf2-106020012025102316,    4.2.5.6-BP6 hf3-106030012025112319,    4.2.5.6-BP6 hf4-106040012026033011 |
| 4.2.1 | 4.2.1.11-BP11 hf5-111050022025071110 |  | |
| 4.3.5 | 4.3.5.3-BP3-103000102025071821 | 4.3.5.5-BP5-105000212025111617 | |
| 4.4.x LDS | 4.4.0.0-Beta-100000562025070723 |  | |

## 解决方案

1. **绑定 Outline**：为受影响的 PS 语句绑定 Outline，以规避 SPM 对该语句的计划演进。绑定 Outline 后，该语句的执行计划可以正常加入 Plan Cache。
 2. **升级版本**：将 OceanBase 内核升级至已修复该问题的版本。

## 规避方案

为出现问题的 PS 语句绑定 Outline，使其不参与 SPM 的计划演进过程。绑定 Outline 后，该语句的执行计划即可正常加入 Plan Cache，从而避免硬解析。

上一篇

[远程执行中 DAS 计划出现正确性问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000006519063)

下一篇

[使用 obclient 执行 SQL 文件如何打印结果日志](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000004752620) ![有帮助](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) 咨询热线
