首批通过分布式安全可靠测评,为关键业务系统打造
clog 文件回收策略
更新时间:2024-06-14 05:56
OceanBase 数据库 V3.2.x 及之后的版本为了支持存储计算分离(OFS),对 clog 文件的回收策略进行了调整,目前 V3.1.x(含)之前的版本和 V3.2.x(含)之后版本的 clog 文件回收策略不尽相同,本文整理概述了两种不同的 clog 文件回收策略。
相关配置项
和 clog 文件使用空间相关的配置项主要有以下几个:
clog_disk_utilization_threshold
该配置项为 clog 文件复用的阈值,即当 clog 已使用空间占可用空间的比例 P 小于该值时,会新建 clog 文件;当
P>=clog_disk_utilization_threshold后,则不再分配新的 clog 文件,优先复用老的 clog 文件。取值范围为[10, 100),默认值为80。稳定运行状态下,clog 已使用空间占可用空间的比例会保持在clog_disk_utilization_threshold。clog_disk_usage_limit_percentage
该配置项为 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。-
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 盘满的场景除外。