---
title: clog 文件回收策略-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 clog 文件回收策略相关的常见问题和使用技巧，帮助您快速解决 clog 文件回收策略的难题。
---
切换语言

- 简体中文
- English

划线反馈

# clog 文件回收策略

更新时间：2024-06-14 05:56

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

OceanBase 数据库 V3.2.x 及之后的版本为了支持存储计算分离(OFS)，对 clog 文件的回收策略进行了调整，目前 V3.1.x(含)之前的版本和 V3.2.x(含)之后版本的 clog 文件回收策略不尽相同，本文整理概述了两种不同的 clog 文件回收策略。

## 相关配置项

和 clog 文件使用空间相关的配置项主要有以下几个：

- [clog_disk_utilization_threshold](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355684)

  该配置项为 clog 文件复用的阈值，即当 clog 已使用空间占可用空间的比例 P 小于该值时，会新建 clog 文件；当 `P>=clog_disk_utilization_threshold` 后，则不再分配新的 clog 文件，优先复用老的 clog 文件。取值范围为 `[10, 100)`，默认值为 `80`。稳定运行状态下，clog 已使用空间占可用空间的比例会保持在 `clog_disk_utilization_threshold`。
 - [clog_disk_usage_limit_percentage](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355683)

  该配置项为 clog 盘空间不足时停写的阈值，当 clog 已使用空间占可用空间的比例超过该值，则会触发停写。其取值范围为 `[80,100]`，默认值为 `95`。`clog_disk_usage_limit_percentage` 的取值需大于 `clog_disk_utilization_threshold`。该配置项不影响 clog 文件的回收策略。
 - clog_usage_limit_size

  本地模式是通过磁盘的使用率来评估 clog 文件的使用量。OceanBase 上 OFS 之后，不再有磁盘的概念，V3.2.x 及之后的版本输出该配置项来描述 clog 文件的可使用空间，表示 clog 文件可用空间的最大值，取值范围为 `[0, +∞)`， 默认值为`100TB`。
 - [clog_expire_days](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355685)

  V3.2.x 及之后的版本输出，用于控制 clog 文件的过期时间。已存活时间超过这个值且可被回收的无用 clog 文件将被删除。这个配置项对于 `clog_disk_utilization_threshold` 是一个补充。即使 clog 可用空间站最大可使用空间的比例小于 `clog_disk_utilization_threshold`，其中存活时间超过 `clog_expire_days` 且可被回收的 clog 文件也会被删除，进而降低 clog 空间使用比例，对于公有云场景，可降低用户的存储成本。

## 回收策略

clog 中维护了三个 `file_id` 分别为 `min_using_file_id_`、`min_file_id_` 和 `max_file_id_`，下面将分别介绍。

- `min_using_file_id_`:表示当前不可回收的最小的clog文件id。
 - `min_file_id_`:表示当前最小的 clog 文件 id，包含可回收和不可回收的 clog 文件，`min_file_id_<=min_using_file_id_`。
 - `max_file_id_`:最大的 clog 文件的 `file_id`。

### V3.1.x 及之前的版本

OceanBase 数据库 V3.1.x 及之前的版本未考虑存储计算分离，只考虑本地磁盘模式。

#### 回收触发时机

clog 内部维护了一个值 `free_quota`，`free_quota=clog 盘总容量 * clog_disk_utilization_threshold-clog 盘已使用空间`。当该值小于 0，则会触发 clog 文件的回收。clog 盘的总容量和已使用空间均通过 `statfs()` 函数获取磁盘状态计算而得。

#### 测试模拟

通过在日志盘 `touch` 一个大文件模拟磁盘空间使用率超过 80%；或者修改 `clog_disk_utilization_threshold` 配置项为一个较小的值。

### V3.2.x 及之后版本

OceanBase 数据库 V3.2.x 及之后的版本，clog 文件的存储介质从本地磁盘扩展到 OFS。在 OFS 场景下，没有磁盘的概念，引入 `clog_usage_limit_size` 来统一表示 clog 文件可使用的最大空间。

#### 回收触发时机

OceanBase 数据库 V3.2.x 及之后的版本的回收触发时机有两个：

- clog 空间使用量达到一定比例。

  V3.2.x 版本同样维护了 `free_quota_`,`free_quota_=(clog 文件可使用空间容量 * clog_disk_utilization_threshold - clog 文件已使用空间)`。当 `free_quota_` 小于 0，则触发可回收 clog 文件的删除。

  clog 文件可使用空间在本地盘模式和 OFS 模式下的计算方式略有不同。在本地盘模式下 `clog 文件可使用空间=min(clog 目录所在盘大小 * clog_usage_limit_size)`；OFS 模式下 `clog 文件可使用空间=clog_usage_limit_size`。

  其中 `clog 文件已使用空间=(max_file_id_- min_file_id_**_** **_**+ 1) * CLOG_FILE_SIZE`。`clog_file_size`=64M。
 - 可回收 clog 文件的存活时间超过 `clog_expire_days`。

  在 `free_quota_>0` 的场景下，为了及时删除可回收 clog 文件，减小 clog 文件总的空间使用量。当可回收的 clog 文件的存活时间超过 `clog_expire_days` 时，也会触发 clog 文件的删除。

#### 测试模拟方式

通过将 `clog_usage_limit_size` 设置为一个较小的值，可以触发 clog 文件的回收删除。 `alter system set clog_usage_limit_size='2G';` 需要注意的是，该值不可设置的太小，否则会触发 clog 盘满导致的问题(比如停写，Leader 卸任)，特意模拟 clog 盘满的场景除外。

Previous

[OceanBase 数据库事务触发同步 CLOG 时机梳理](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000209954)

Next

[Clog 常见问题及运维规避手段](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000922008) ![有帮助](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) 咨询热线
