clog限速和回收的问题

      name: log_disk_utilization_threshold
 data_type: INT
     value: 80
      info: log disk utilization threshold before reuse log files, should be smaller than log_disk_utilization_limit_threshold. Range: [10, 100)
      name: log_disk_utilization_limit_threshold
 data_type: INT
     value: 95
      info: maximum of log disk usage percentage before stop submitting or receiving logs, should be bigger than log_disk_utilization_threshold. Range: [80, 100]
      name: log_disk_throttling_maximum_duration
 data_type: TIME
     value: 2h
      info: maximum duration of log disk throttling, that is the time remaining until the log disk space is exhausted after log disk throttling triggered.
      name: log_disk_throttling_percentage
 data_type: INT
     value: 60
      info: the threshold of the size of the log disk when writing_limit will be triggered. Rang:[40,100]. setting 100 means turn off writing limit

clog日志空间使用超过80%时:开始回收重复利用
clog日志空间使用超过95%时:停止使用
clog日志空间使用超过60%时:开始限速clog写入

比较好奇这里,为什么把clog reuse的阈值设置成这么高呢 80%。不是memtable刷盘后就可以reuse吗?
另外,clog的reuse空间阈值可以设置低一点,比如 50% 60%等,
相反限速可以设置高一点,比如80%,限速后还继续写入,如果超过95%后开始禁止使用。

@论坛小助手

根据您提出的问题,我们可以从 OceanBase 的设计原理和配置项的功能描述中找到答案。以下是针对您的问题的详细解答:

1. 为什么 log_disk_utilization_threshold(CLOG 复用阈值)设置为 80%?

答案依据:

  • 根据文档片段 7 和片段 4 的描述,log_disk_utilization_threshold 是 CLOG 磁盘复用的下限。当 CLOG 磁盘使用量超过该值时,系统会开始复用最老的日志文件。
  • 默认值为 80%,这是因为 OceanBase 数据库在正常运行时需要保证一定的磁盘空间冗余,以应对突发的写入压力或转储延迟等情况。如果将复用阈值设置得过低(如 50% 或 60%),可能会导致以下问题:
    • 磁盘利用率降低:过多的磁盘空间被预留出来用于复用,但实际可能并不会频繁触发复用逻辑,从而浪费了存储资源。
    • 频繁复用带来的性能开销:CLOG 文件复用涉及日志文件的清理和重写操作,频繁触发复用会增加 I/O 负载,影响数据库的整体性能。

因此,默认值 80% 是一个经过权衡后的合理选择,在保证磁盘空间高效利用的同时,也为突发写入留出了足够的缓冲空间。


2. 是否可以将 log_disk_utilization_threshold 设置为更低的值(如 50% 或 60%)?

答案依据:

  • 根据文档片段 4 和片段 7 的描述,log_disk_utilization_threshold 的取值范围是 [10, 99],理论上是可以调整为更低的值(如 50% 或 60%)的。
  • 但是,这样做可能会带来以下风险:
    • 磁盘空间浪费:较低的复用阈值会导致更多的磁盘空间被预留出来,而这些空间可能并不会被充分利用。
    • 性能波动:频繁的 CLOG 文件复用可能会增加 I/O 压力,尤其是在高并发写入场景下,可能导致性能下降。

如果您确实希望调整该值以适应特定场景,建议在测试环境中充分验证其对性能和稳定性的影响后再进行生产环境部署。


3. 是否可以将限速阈值 log_disk_throttling_percentage 提高到 80%?

答案依据:

  • 根据文档片段 2 和片段 6 的描述,log_disk_throttling_percentage 是触发日志限速的阈值,默认值为 60%。将其提高到 80% 是可行的,但需要注意以下几点:
    • 更高的写入压力容忍度:将限速阈值提高到 80% 后,系统可以在磁盘使用率达到 80% 之前继续接受写入请求,从而更好地应对突发的写入压力。
    • 潜在的风险:如果写入压力持续较高且转储速度跟不上,可能会更快地达到停写阈值(95%),从而导致业务中断。

因此,是否调整该值需要根据具体的业务场景和写入压力来决定。如果您的业务场景中写入压力较大且转储速度较慢,可以尝试将限速阈值提高到 80%,但需要密切监控磁盘使用情况,确保不会快速达到停写阈值。


4. 关于 CLOG 复用时机的疑问:不是 Memtable 刷盘后就可以复用吗?

答案依据:

  • 根据文档片段 9 的描述,CLOG 文件的复用需要满足一定的条件,即日志相关的数据已经成功持久化到磁盘上。即使 Memtable 刷盘完成,也需要确保相关日志不再需要用于恢复或同步后,才能安全地复用 CLOG 文件。
  • 因此,CLOG 文件的复用不仅仅依赖于 Memtable 刷盘,还需要考虑其他因素,如日志归档、备库同步等。

综合建议

  1. 默认配置的合理性:默认的 log_disk_utilization_threshold=80%log_disk_throttling_percentage=60% 是经过大量测试和实践得出的最佳平衡点,适用于大多数场景。
  2. 自定义调整:如果您有特殊需求(如写入压力较大或磁盘空间有限),可以根据实际情况调整这些参数,但需要充分测试并监控其对性能和稳定性的影响。
  3. 监控与优化:无论是否调整参数,都需要定期监控磁盘使用情况和性能指标,及时发现并解决潜在问题。

如果您还有其他疑问,欢迎进一步交流!

更多信息请查看:

  1. clog_disk_utilization_threshold
  2. log_disk_throttling_maximum_duration
  3. 配置项总览
  4. log_disk_utilization_threshold
  5. clog_disk_usage_limit_percentage
  6. log_disk_utilization_limit_threshold
  7. Redo 日志
  8. 集群管理 FAQ
  9. 日志同步问题
  10. OceanBase 数据库性能的影响因素
1 个赞