【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】磁盘io偶尔会变成下面的,数据库时不时就报disk is hung
Total DISK READ : 0.00 B/s | Total DISK WRITE : 115.34 K/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 477.59 K/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
66996 be/4 root 0.00 B/s 43.25 K/s 0.00 % 99.99 % observer -p 2881 [T1001_IOWorker]
67140 be/4 root 0.00 B/s 14.42 K/s 0.00 % 99.99 % observer -p 2881 [T1002_IOWorker]
67139 be/4 root 0.00 B/s 21.63 K/s 0.00 % 99.99 % observer -p 2881 [T1002_IOWorker]
66842 be/4 root 0.00 B/s 21.63 K/s 0.00 % 99.99 % observer -p 2881 [T1_IOWorker]
3789460 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.31 % [kworker/0:2-events_freezable_power_]
3199 be/3 root 0.00 B/s 0.00 B/s 0.00 % 0.20 % [jbd2/sdb1-8]
66778 be/4 root 0.00 B/s 14.42 K/s 0.00 % 0.00 % observer -p 2881 [IO_SCHEDULE13]
【复现路径】问题出现前后相关操作
【附件及日志】
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
根据您的描述,OceanBase 在生产环境中遇到了磁盘 I/O 问题,偶尔磁盘 I/O 会变得非常低,导致数据库报错 ‘disk is hung’。这可能是由于磁盘性能下降或磁盘挂起导致的问题。为了进一步诊断问题,建议使用 obdiag 工具进行日志采集,并将采集到的日志提供给我们以便确认问题所在。
日志采集场景: IO问题
日志采集命令: obdiag gather scene run --scene=observer.io
请您执行上述命令进行日志采集,并将生成的日志文件提供给我们。此外,为了更准确地定位问题,还需要您提供以下信息:
- 当前使用的 OceanBase 版本是什么?
- 系统中是否有其他应用也在使用相同的磁盘资源?
- 是否有定期监控磁盘 I/O 性能的工具或手段?如果有,请提供最近的监控数据。
- 报错 ‘disk is hung’ 出现的具体时间点,以及该时间段内是否有其他异常操作或事件发生?
- 系统是否配置了足够的缓存来减轻磁盘 I/O 压力?
- 是否尝试过重启数据库或服务器以查看问题是否有所改善?
感谢您的配合,我们将尽快为您解决问题。
具体信息可参考以下文档:
附上敏捷诊断工具 obdiag 使用帮助链接
参考小助手的建议使用obdiag进行一下日志采集看看
1、磁盘问题,检查下/var/log/messages
2、可以用这个命令具体检查一下 smartctl -a /dev/sda2
3、df -h看看磁盘的空间是否有问题
4、 用obdiag命令 可以具体分析 日志采集命令: obdiag gather scene run --scene=[observer.io]
虚拟机上部署的
根据文档库中的信息,当遇到磁盘 I/O 问题时,特别是当磁盘偶尔挂起导致数据库报错“disk is hung”,可以采取以下步骤进行排查和解决:
1. 检查磁盘状态和数据库负载情况
-
检查磁盘状态:确保磁盘没有硬件故障或性能瓶颈。可以使用
iostat
或dstat
等工具监控磁盘 I/O 情况。 -
检查数据库负载:查看当前数据库的负载情况,是否有大量的写操作导致磁盘 I/O 压力过大。可以使用
top
或htop
查看系统负载,使用obdiag
工具收集相关日志。
2. 检查 Clog 状态
- Clog 日志磁盘被 Hang 住:根据文档 [1],错误码 6325 表示 Clog 日志磁盘被 Hang 住。可以检查 Clog 磁盘的状态,确保其没有达到满盘状态。
-
Clog 写盘 hung 住:根据文档 [1],如果 Clog 写盘 hung 住,将会记录 failure 事件,Leader 的优先级会被降低,其后会自动选择最优副本直接切主。可以查询
DBA_OB_SERVER_EVENT_HISTORY
视图查看是否有相关的切主事件。
3. 检查磁盘静默错误
- 磁盘静默错误检测:根据文档 [1],OceanBase 数据库的 redo 日志和 SSTable 中的数据都保存了校验和,读取数据的时候执行严格的校验检查,及时发现错误。可以检查磁盘静默错误检测机制是否正常工作。
4. 处理 Clog 满盘问题
-
调整 Clog 磁盘使用限制:如果 Clog 磁盘达到 95% 之后自动停写,可以临时调整
clog_disk_usage_limit_percentage
配置项,将其调大到 98%,以便有更多的时间来解决问题。具体命令如下:alter system set clog_disk_usage_limit_percentage = 98 server ='xxx:2882';
-
检查 Clog 同步状态:执行以下 SQL 查询 Clog 不同步的分区数是否有减少:
select svr_ip, count(*) from gv$ob_log_stat where is_offline = 0 and is_in_sync = 0 group by 1;
-
检查 rebuild 任务:如果上述查询结果非 0,继续检查是否有正在做 rebuild 的副本:
select svr_ip, count(*) from __all_virtual_partition_migration_status where action != 'END' group by 1;
-
调整 rebuild 任务并发配置:如果 rebuild 任务较多,可以调整
data_copy
相关的配置项:show parameters like "%data_copy%";
5. 优化虚拟机配置
- 虚拟机资源分配:确保虚拟机有足够的资源分配,特别是 CPU 和内存,以避免因资源不足导致的 I/O 问题。
- 虚拟磁盘配置:检查虚拟磁盘的配置,确保其性能满足数据库的需求。可以考虑使用 SSD 或更高性能的存储介质。
6. 收集日志
-
使用 obdiag 工具:可以使用
obdiag
工具收集相关日志,以便进一步分析问题。具体命令如下:obdiag gather scene run --scene=observer.io
7. 联系技术支持
- 联系 OceanBase 技术支持:如果以上步骤无法解决问题,建议联系 OceanBase 的技术支持团队,提供收集到的日志和相关信息,以便获得更专业的帮助。
希望以上步骤能帮助您解决磁盘 I/O 问题。如果还有其他疑问或需要进一步的帮助,请随时联系。
更多信息请查看:
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
尽量按照我上面的步骤 检查一下