clog回收时机问题

log_disk_utilization_threshold该参数用于控制clog的回收时机,但是在实际环境中,经常遇到clog盘满的情况,导致数据库hang住,所以这个参数并不能完全触发回收,还有其它情况影响,那么到底还有哪些可能会影响呢? 长事务影响不影响?server_permanent_offline_time设置过大会不会因为长时间保留日志用于暂时下线节点的恢复? 转出,合并等等其它情况是否也会影响??

3 个赞

@OB社区小助手1

2 个赞

感谢分享

2 个赞

log_disk_utilization_threshold参数确实是控制clog回收的关键指标,但如果存在较多的长事务、则会阻塞clog的回收,这里不是绝对的。server_permanent_offline_time设置过大会因为长时间保留日志用于暂时下线节点的恢复,转储、合并也会影响clog日志的回收,如果转储或者合并长时间没有完成,则会保留clog。

2 个赞

应该还有其他综合判定条件吧

1 个赞

都有可能吧,虽然达到了你设置的阈值,但是也要看是否存在可以回收的日志才能进行回收,并不是强制回收,至于是否可以回收,那情况肯定也有你说的那种情况,实在不行,你就扩容一下,或写入限速 :face_with_peeking_eye:

1 个赞

@论坛小助手

关于CLog回收时机的问题,涉及到几个关键因素:

  1. log_disk_utilization_threshold参数确实用于控制CLog的回收时机,但并不是唯一因素。CLog回收的前提是该文件中的所有分区日志对应的数据都已经转储到SSTable中,否则即使超过了设定阈值也不会回收。
  2. 如果有长事务存在,这些事务涉及的日志不能被回收,直到这些事务提交或回滚,这是因为在长事务期间,CLog需要保持足够的信息以便在发生故障时恢复数据。
  3. server_permanent_offline_time设置得过大确实会影响CLog的回收,因为为了支持长时间离线服务器的恢复,相关日志文件需要被保留更长时间。
  4. 转储和合并操作也会影响CLog的回收。转储操作将内存中的数据持久化到磁盘上的SSTable中,只有当数据完全转储后,相关的CLog文件才能被标记为可回收。如果转储过程失败或者卡住,会导致CLog文件无法被及时回收。
  5. 其他可能导致CLog满盘的情况包括但不限于磁盘空间被其他用户文件占用、系统故障或磁盘I/O性能问题。

检索到的文档如下:

  1. 日志同步问题
  2. Redo 日志
  3. 集群管理 FAQ
  4. OceanBase 数据库性能的影响因素

学习一下

深层原理先mark,后面再慢慢学习