---
title: 如何设置表的统计信息收集之后，不触发计划重新生成-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 如何设置表的统计信息收集之后，不触发计划重新生成相关的常见问题和使用技巧，帮助您快速解决 如何设置表的统计信息收集之后，不触发计划重新生成的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 如何设置表的统计信息收集之后，不触发计划重新生成

更新时间：2026-05-18 01:51

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

统计信息收集后，可以根据 `DBA_OB_TABLE_STAT_STALE_INFO` 的 LAST_ANALYZED 字段，判定出一个计划生成过程中使用的统计信息是否被更新了。如果被更新了，那么默认就会淘汰对应表在 Plan Cache 中包含的查询计划。 重新生成计划需要将 SQL 中涉及到的表的统计信息相关信息拉到 KVCACHE 中，如果对应 SQL 的硬解析时间比较久，还有可能导致 SQL 硬解析时间长，对 RT 敏感的业务造成影响。 此外，在 V4.2.5 BP5/V4.3.5 BP3 之前的版本，还存在计划淘汰后，并发执行的相同 SQL（同 SQL_ID），会多个线程并发生成同一条 SQL 的计划的情况，进而造成大量并发执行，资源瓶颈的情况。 如果此张表涉及到的计划比较固定，想要避免收集统计信息之后，刷新 Plan Cache 带来的 SQL 硬解析影响，可以将表的 `NO_INVALIDATE=TRUE`，那么这个统计信息暂时不需要触发执行计划的淘汰。

## 详细说明

具体可以通过 `call dbms_stats.get_prefs('NO_INVALIDATE','DB','Table') from dual;` 确认当前表的 `NO_INVALIDATE` 的值，然后执行 `call dbms_stats.set_table_prefs('DB','Table','NO_INVALIDATE','TRUE') from dual;` 设置对应的属性。

```sql
OceanBase(root@TEST)> select  dbms_stats.get_prefs('NO_INVALIDATE', 'TEST', 'T1') from dual;
+------------------------------------------------------------------+
| dbms_stats.get_prefs('NO_INVALIDATE', 'TEST', 'T1')             |
+------------------------------------------------------------------+
| DBMS_STATS.AUTO_INVALIDATE                                      |
+------------------------------------------------------------------+
1 row in set (3.718 sec)

OceanBase(root@TEST)>  CALL dbms_stats.set_table_prefs('TEST', 'T1', 'NO_INVALIDATE', 'TRUE');
Query OK, 0 rows affected (0.540 sec)

OceanBase(root@TEST)> select  dbms_stats.get_prefs('NO_INVALIDATE', 'TEST', 'T1') from dual;
+------------------------------------------------------------------+
| dbms_stats.get_prefs('NO_INVALIDATE', 'TEST', 'T1')             |
+------------------------------------------------------------------+
| TRUE                                                            |
+------------------------------------------------------------------+
1 row in set (0.039 sec)

OceanBase(root@TEST)> CALL dbms_stats.set_table_prefs('TEST', 'T1', 'NO_INVALIDATE', 'FALSE');
Query OK, 0 rows affected (0.064 sec)

OceanBase(root@TEST)> select  dbms_stats.get_prefs('NO_INVALIDATE', 'TEST', 'T1') from dual;
+------------------------------------------------------------------+
| dbms_stats.get_prefs('NO_INVALIDATE', 'TEST', 'T1')             |
+------------------------------------------------------------------+
| FALSE                                                           |
+------------------------------------------------------------------+
1 row in set (0.036 sec)

```

## 适用版本

OceanBase 数据库 V4.x 版本。

Previous

[带有 __all_virtual_ls_info 表的 SQL 比较消耗资源](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000005437443)

Next

[OceanBase 数据库 stack_size 参数配置指南](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002394693) ![有帮助](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) 咨询热线
