clog日志清理

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】4.3.4
【问题描述】
clog_disk_utilization_threshold参数的具体含义是什么
1.达到所设定的百分比之后,clog日志会触发,清理最早的写入的日志么??
2.所谓的达到磁盘的百分比,这个磁盘空间指的是什么,是log_disk_size所设定的值,还是创建租户的时候,分配给租户的log空间,亦或是clog目录所在的磁盘分区的大小???

2 个赞

@论坛小助手

根据文档库中的信息,以下是关于 clog_disk_utilization_threshold 参数的具体含义及问题的解答:


1. 达到所设定的百分比之后,CLOG 日志会触发清理最早的写入的日志吗?

答案:是的,会触发清理最早的写入的日志。

  • 根据文档片段 6 和片段 8 的描述,clog_disk_utilization_threshold 参数用于控制 CLOG 磁盘空间复用的水位值。当磁盘使用量超过设定的百分比时,系统会开始回收(复用)最早的日志文件。
  • 具体来说,clog_disk_utilization_threshold 的默认值为 80%,表示当 CLOG 磁盘空间使用率达到 80% 时,系统会尝试清理可以回收的最早日志文件。

注意:

  • 清理的前提是这些日志文件已经不再需要(例如,对应的事务已提交且数据已持久化到磁盘)。
  • 如果日志文件仍处于活跃状态(例如,事务未完成或数据未完全持久化),即使达到阈值也不会被清理。

2. 所谓的达到磁盘的百分比,这个磁盘空间指的是什么?

答案:指的是租户分配的日志盘空间总量。

  • 根据文档片段 5 和片段 7 的描述,在 OceanBase 数据库 V4.x 版本中,日志盘空间管理拆分为租户级别。因此,clog_disk_utilization_threshold 参数中的“磁盘空间”是指 租户分配的日志盘空间总量,而不是整个物理磁盘分区的大小。
  • 租户分配的日志盘空间总量由以下因素决定:
    • 如果在创建租户时明确指定了日志盘空间大小,则以该值为准。
    • 如果未明确指定,则根据全局配置项 log_disk_sizelog_disk_percentage 计算得出(参考文档片段 2)。

具体说明:

  • log_disk_sizelog_disk_percentage 这两个参数用于配置 OBServer 节点上的日志盘总空间大小。如果 log_disk_size 设置为非零值,则优先使用该值;否则根据 log_disk_percentage 计算日志盘空间。
  • 租户级日志盘空间分配: 在创建租户时,OceanBase 会从节点的日志盘总空间中分配一部分给该租户。clog_disk_utilization_threshold 参数的作用范围就是这部分分配的空间。

总结:

  • 磁盘空间不是指 clog 目录所在的物理磁盘分区大小,也不是直接由 log_disk_size 决定,而是指 租户分配的日志盘空间总量

补充说明

  • clog_disk_utilization_thresholdclog_disk_usage_limit_percentage 的关系:

    • clog_disk_utilization_threshold 是日志盘空间复用的水位值,默认为 80%。超过此值后,系统会尝试清理最早的日志文件。
    • clog_disk_usage_limit_percentage 是日志盘空间使用的上限,默认为 95%。超过此值后,系统会停止写入新的日志。
    • 两者的取值范围和关系如下:
      • clog_disk_utilization_threshold 的取值范围为 [10, 99]。
      • clog_disk_usage_limit_percentage 的取值范围为 [80, 100]。
      • 必须满足 clog_disk_utilization_threshold < clog_disk_usage_limit_percentage
  • 示例配置:

    -- 设置日志盘空间复用水位值为 80%
    ALTER SYSTEM SET clog_disk_utilization_threshold=80;
    
    -- 设置日志盘空间使用上限为 95%
    ALTER SYSTEM SET clog_disk_usage_limit_percentage=95;
    

结论

  1. 当 CLOG 磁盘空间使用率达到 clog_disk_utilization_threshold 的设定值时,系统会触发清理最早的写入的日志。
  2. 磁盘空间指的是租户分配的日志盘空间总量,而不是整个物理磁盘分区的大小或 log_disk_size 的值。

希望以上解答能够帮助您更好地理解 clog_disk_utilization_threshold 参数的含义及其作用机制!

检索到的文档如下:

  1. Redo 日志
  2. BootStrap
  3. clog_disk_usage_limit_percentage
  4. clog_disk_utilization_threshold
  5. 日志同步问题
  6. log_disk_utilization_threshold
  7. log_disk_utilization_limit_threshold
  8. clog_expire_days
  9. OceanBase 数据库性能的影响因素

怎么查询租户现在已经用了多少日志空间


1.clog目录里,log_pool占用空间最大,他是什么日志,属于哪个租户么??
2.我的租户ID是1004, tenant_1004是不是就是我的租户产生的clog日志

SELECT TENANT_ID, TENANT_NAME, SPACE_TYPE, USAGE_BYTES

FROM oceanbase.CDB_OB_SPACE_USAGE

WHERE SPACE_TYPE = ‘clog Data’ AND TENANT_NAME = ‘<您的租户名称>’;

1 个赞

log_pool你可以理解是一个日志的池子,日志文件使用的空间从log_pool里面取就行了,这个是预先分配好的,你要是看日志实际占用的空间,通过查询 dba_ob_tenants 和gv$ob_units视图可以获取租户的日志盘的使用情况
select
a.tenant_name,
b.svr_ip,
round(memory_size/1024/1024/1024,2) as memory_size,
round(LOG_DISK_IN_USE/LOG_DISK_SIZE,2) LOG_DISK_USE_PERCENTAGE,
round(LOG_DISK_SIZE/1024/1024/1024,2) as LOG_DISK_SIZE,
round(LOG_DISK_IN_USE/1024/1024/1024,2) as LOG_DISK_IN_USE
from
dba_ob_tenants a,
gv$ob_units b
where
a.tenant_id = b.tenant_id
and a.tenant_id = 1002

1 个赞

谢谢分享 :grinning: