---
title: "历史管理功能 | OceanBase 文档中心"
description: 历史管理功能 统计信息历史管理功能主要是指统计信息状态发生改变时（统计信息被重新收集、设置、删除、导入、锁定等），会将统计信息发生改变之前的统计信息状态保存到统计信息历史记录表中，统计信息历史记录表可以查询某张表的一个历史统计信息改变情况，同时也能够恢复指定历史版本的统计信息。 统计信息历史表及视图 OceanBas…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.2.3 企业版 LTS

# 历史管理功能

更新时间：2023-07-18 17:25:59

统计信息历史管理功能主要是指统计信息状态发生改变时（统计信息被重新收集、设置、删除、导入、锁定等），会将统计信息发生改变之前的统计信息状态保存到统计信息历史记录表中，统计信息历史记录表可以查询某张表的一个历史统计信息改变情况，同时也能够恢复指定历史版本的统计信息。

## 统计信息历史表及视图

OceanBase 数据库优化器使用如下内部表来保存统计信息历史记录：

- `__all_table_stat_v2_history` 用于保存表级的历史统计信息。
 - `__all_column_stat_v2_history` 用于保存列级的基本历史统计信息。
 - `__all_histogram_stat_v2_history` 用于保存列级的直方图历史统计信息。

表的字段基本上和保存统计信息的内部表字段一致，不同点是会多一个 `savtime` 列，用于记录统计信息状态发生改变的时间，同时可以通过如下的视图来查询统计信息历史变化情况。

| 视图名称 | 描述 |
| --- | --- |
| ALL_TAB_STATS_HISTORY DBA_TAB_STATS_HISTORY USER_TAB_STATS_HISTORY | 用于查询统计信息历史变化。 |
| SYS.ALL_VIRTUAL_TABLE_STAT_V2_HISTORY_REAL_AGENT | 用于查询表级的统计信息历史的虚表。 |
| SYS.ALL_VIRTUAL_COLUMN_STAT_V2_HISTORY_REAL_AGENT | 用于查询列级的基本统计信息历史的虚表。 |
| SYS.ALL_VIRTUAL_HISTOGRAM_STAT_V2_HISTORY_REAL_AGENT | 用于查询列级的直方图信息历史的虚表。 |

## 统计信息历史管理相关函数

目前支持如下历史管理相关函数：

- `restore_table_stats` 恢复指定时刻的表级历史统计信息。
 - `restore_schema_stats` 恢复指定时刻的 Schema 级历史统计信息。
 - `purge_stats` 删除指定时刻之前的历史统计信息。
 - `alter_stats_history_retention` 修改历史统计信息的的保留间隔时间，默认保留间隔时间为 31 天。
 - `get_stats_history_retention` 获取当前历史统计信息的保留间隔时间。
 - `get_stats_history_availability` 获取当前可用的最早历史统计信息时间，无法恢复指定时间早于这个时间的历史统计信息。

具体的定义如下：

```sql
PROCEDURE restore_table_stats (
  ownname               VARCHAR2,
  tabname               VARCHAR2,
  as_of_timestamp       TIMESTAMP WITH TIME ZONE,
  restore_cluster_index BOOLEAN DEFAULT FALSE,
  force                 BOOLEAN DEFAULT FALSE,
  no_invalidate         BOOLEAN DEFAULT FALSE
);

PROCEDURE restore_schema_stats (
  ownname               VARCHAR2,
  as_of_timestamp       TIMESTAMP WITH TIME ZONE,
  force                 BOOLEAN DEFAULT FALSE,
  no_invalidate         BOOLEAN DEFAULT FALSE
);

PROCEDURE purge_stats(
  before_timestamp      TIMESTAMP WITH TIME ZONE
);

PROCEDURE alter_stats_history_retention(
  retention             NUMBER
);

FUNCTION get_stats_history_retention RETURN NUMBER;

FUNCTION get_stats_history_availability RETURN TIMESTAMP WITH TIME ZONE;

```

参数解释如下表所示。

| 参数 | 解释 |
| --- | --- |
| ownname | 用户名。 |
| tabname | 表名称。 |
| as_of_timestamp | 指定恢复时间。 |
| restore_cluster_index | 该参数暂未实现，不可用。 |
| force | 强制恢复，并忽略加锁。默认是 False。 |
| no_invalidate | 该参数暂未实现，不可用。 |

## 统计信息历史清理策略

目前 OceanBase 数据库支持两种方式清理统计信息历史：自动清理和手动清理。

由于 OceanBase 数据库是一个分布式的数据库，因此没法直接在 Server 内部创建租户的同时自动去创建清理任务，因此需要显示地在创建好租户或者低版本的 Server 升级上来的租户中利用 DBMS_JOB 去创建一个定时任务来自动清理统计信息历史，示例如下。

```sql
##设置一个从现在开始，每隔一天执行自动清理统计信息历史的任务
DECLARE
   jid BINARY_INTEGER;
BEGIN
   DBMS_JOB.SUBMIT(jid, 'dbms_stats.purge_stats(NULL);', trunc(sysdate), 'trunc(sysdate) + 1');
   COMMIT;
END;

```

默认的清理任务间隔是 31 天，可以通过 `dbms_stats.alter_stats_history_retention()` 去设置，有效范围值为 [0,365000]。如果设置为 0，则表示清除所有历史统计信息，后续也不在记录。

手动清理是指显示调用 `dbms_stats.purge_stats()` 命令去执行清理。

## 示例

- 获取当前历史统计信息的保留间隔时间。

  ```sql
  SELECT dbms_stats.get_stats_history_retention() FROM DUAL;

  ```
 - 获取当前可用的最早历史统计信息时间。

  ```sql
  SELECT dbms_stats.get_stats_history_availability() FROM DUAL;

  ```
 - 修改历史统计信息的保留间隔时间为 15 天。

  ```sql
  CALL dbms_stats.alter_stats_history_retention(15);

  ```
 - 指定恢复用户名 `test` 下的 `tbl1` 表在某个时刻下的统计信息。

  ```sql
  CALL dbms_stats.restore_schema_stats('test', 'tbl1', to_timestamp('2021-09-26 19:02:12.675729', 'YYYY-MM-DD HH24:MI:SS.FF'));

  ```
 - 手动清理指定时刻的历史统计信息。

  ```sql
  CALL dbms_stats.purge_stats(to_timestamp('2021-09-26 19:02:12.675729', 'YYYY-MM-DD HH24:MI:SS.FF'));

  ```

 上一篇 下一篇 ![有帮助](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) 咨询热线
