暂无图片
暂无图片
1
暂无图片
暂无图片
1
暂无图片

【OceanBase】日志磁盘满

1366

OceanBase 数据库日志盘满,会对业务产生一定的影响,当自清理机制无法触发时,需要用户进行手动处理。

场景描述

事务日志盘 /data/log1 包含 OceanBase 数据库的 redo log,而 redo log 主要包括 clog 和 ilog 两部分。clog 全称 commit log,位于 store/xxx/clog目录下,xxx 是集群名 ,记录数据库中数据所做的更改操作,提供数据持久性保证。ilog 全称 index log,位于 store/xxx/ilog目录下, 是 clog 的索引,本质上是一种优化,ilog 的文件删除不会影响数据持久性,但可能会影响系统的恢复时间。该盘空间满,会产生业务无法写数据等影响。

这两种文件均按需自动创建和清除,磁盘写到 80% 会触发自清除逻辑,但前提是这部分日志数据对应的内存数据已经转储到了磁盘中;若该部分数据尚未转储,有撑爆日志盘的风险。因此有时需要手动处理。

解决方案

1. 调整事务日志的磁盘 I/O 最大使用百分比。

clog 盘达到 95% 之后自动停写,无法再接收日志,该阈值由配置项 clog_disk_usage_limit_percentage 控制,可以调整该配置项的值为 98。可以指定只修改盘满的 server。

使用 root@sys 登录,执行以下命令:

obclient> ALTER system SET clog_disk_usage_limit_percentage = 98 server ='[ip地址]:2882';
复制

2. 修改之后,落后的副本会立即触发追日志。如果落后很多会触发 rebuild(从 leader 拷贝 data+clog)。可以通过如下方式观察恢复过程。

执行如下 SQL 语句,检查 clog 不同步的分区数是否有不断减少。

obclient> SELECT svr_ip, count(*) FROM __all_virtual_clog_stat WHERE is_offline = 0 and is_in_sync = 0 group by 1;
复制

a. 如果没有快速减少,则可能有副本触发了 rebuild(rebuild 是一种落后太多情况下追赶的方式,会拷贝基线+增量),继续执行如下 SQL 查询是否有正在做 rebuild 的副本。

obclient> SELECT svr_ip, count(*) FROM __all_virtual_partition_migration_status WHERE action != 'END' group by 1;
复制

b. 观察上述查询结果是否在逐渐减小,如果是在减小,说明 rebuild 副本在进行中。

3. 执行以下命令,观察之前盘满的 server 的 clog 盘空间当前容量。

df -lh
复制

如果 clog 盘空间自动下降到 95% 以下,说明 OBServer 恢复顺利,继续等待所有副本达到 sync 状态即可。如果又达到了 98%,则说明这次调整没有恢复成功,请联系 OceanBase 技术支持人员处理。

4. 待 is_in_sync= 0 的副本数量降为 0 之后,将上述所有改过的配置项恢复原值。




「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

星星之火
暂无图片
9月前
评论
暂无图片 0
人到了一定年纪,是往回收的,收到最后,三两知己、一杯浅茶,把生活活成自己想要的样子。人到了一定年纪,是往回收的,收到最后,三两知己、一杯浅茶,把生活活成自己想要的样子。
9月前
暂无图片 点赞
评论