【 使用环境 】生产环境
【 OB or 其他组件 】
【 使用版本 】5.7.25-OceanBase_CE-v4.2.1.10
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
【 使用环境 】生产环境
【 OB or 其他组件 】
【 使用版本 】5.7.25-OceanBase_CE-v4.2.1.10
【问题描述】清晰明确描述问题
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
根据您提供的信息,您的 OceanBase 数据库在使用机械硬盘(HDD)后性能显著下降。以下是可能的原因及建议的解决方案:
I/O 性能瓶颈:
配置问题:
硬件故障或老化:
检查磁盘 I/O 性能:使用工具如 iostat
或 fio
来监控和评估磁盘的 I/O 性能。如果发现 I/O 延迟过高,考虑更换为 SSD 或者优化现有 HDD 的使用方式。
调整参数:
ob_log_disk_usage_limit_percentage
参数来减少 Redo 日志的频繁刷盘。memstore_limit_percentage
和 minor_freeze_times
参数值,以减少频繁的 Minor Freeze 操作。运行 SMART 测试:使用 smartctl
工具检查机械硬盘的健康状态,排除硬件故障的可能性。
替换硬盘:如果确认硬盘存在故障或老化问题,建议尽快更换为新的硬盘,最好是 SSD。
参考官方文档:根据 V4.2.1_CE Release Notes 中的优化建议,调整相关参数以适应 HDD 环境。
使用 obdiag 工具收集诊断信息:按照您提供的链接使用 obdiag
工具收集详细的诊断信息,以便进一步分析问题。
升级硬件:如果条件允许,建议将机械硬盘升级为固态硬盘,以获得更好的性能表现。
定期维护:定期进行硬件和软件的维护,确保系统处于最佳状态。
如果您需要更详细的帮助或有其他问题,请提供更多的日志信息或联系 OceanBase 的技术支持团队。希望以上建议能帮助您解决问题。
检索到的文档如下:
安装fio
sudo yum install fio
fio
使用作业文件(job file)或者命令行参数来定义测试。有时候使用简单的命令行参数进行测试会更快捷。
fio --name=seq_write --ioengine=libaio --rw=write --bs=1m --size=1G --numjobs=1 --runtime=60 --group_reporting
fio --name=seq_read --ioengine=libaio --rw=read --bs=1m --size=1G --numjobs=1 --runtime=60 --group_reporting
fio --name=rand_write --ioengine=libaio --rw=randwrite --bs=4k --size=1G --numjobs=4 --runtime=60 --group_reporting
fio --name=rand_read --ioengine=libaio --rw=randread --bs=4k --size=1G --numjobs=4 --runtime=60 --group_reporting
--name
: 任务名称。--ioengine
: I/O引擎,常用的有sync
, libaio
, psync
等。--rw
: 读写模式,write
, read
, randwrite
, randread
, rw
(读写混合)等。--bs
: 块大小,例如4k
表示每次I/O为4KB。--size
: 总的I/O数据量,例如1G
。--numjobs
: 并发任务数。--runtime
: 运行时间,以秒为单位。--group_reporting
: 汇总报告以减少输出的冗余信息。fio
会在命令行输出测试结果,其中包含吞吐量(throughput)、IOPS(每秒I/O操作数)及延迟等详细信息,帮助你了解磁盘在不同负载下的性能表现。
使用这些基本命令和参数配置,你可以衡量不同类型的磁盘(如SSD和HDD)的性能特征,并根据需要调整测试场景以模拟实际应用中的工作负载。
随机写iops : min=137870, max=145448, avg=141917.00, stdev=2259.22, samples=12
随机读iops : min= 4, max= 94, avg=36.24, stdev=15.84, samples=480
根据您提供的 fio
测试结果,机械硬盘(HDD)的随机读写性能确实非常低,这可能是导致 OceanBase 数据库性能显著下降的主要原因。具体来看:
确保 fio
测试是在数据库实际使用的磁盘上进行的,并且没有其他高负载任务干扰测试结果。如果可能,尝试在不同的时间段或不同的磁盘上重复测试,以排除偶然因素。
从测试结果来看,HDD 的随机读性能非常差,这对于需要频繁随机读取操作的数据库系统(如 OceanBase)来说是不可接受的。以下是一些建议:
升级到 SSD:SSD 的随机读写性能远高于 HDD,尤其是对于数据库这种对 I/O 性能要求较高的应用,SSD 可以显著提升性能。
使用混合存储方案:如果暂时无法全部更换为 SSD,可以考虑使用混合存储方案,将热数据放在 SSD 上,冷数据放在 HDD 上,以平衡成本和性能。
尽管硬件升级是最直接有效的解决方案,但在硬件条件受限的情况下,也可以通过调整数据库配置来缓解性能问题:
减少日志刷盘频率:可以通过调整 ob_log_disk_usage_limit_percentage
参数来减少 Redo 日志的频繁刷盘。
增加内存缓存:适当增加 memstore_limit_percentage
和 minor_freeze_times
参数值,以减少频繁的 Minor Freeze 操作。
启用异步 I/O:确保启用了异步 I/O 支持,以提高磁盘 I/O 效率。
使用 obdiag
工具收集详细的诊断信息,进一步分析是否存在其他潜在问题。例如:
obdiag collect --all -o /path/to/output
这可以帮助您更全面地了解系统的运行状态,找出可能的瓶颈。
根据 V4.2.1_CE Release Notes 中的优化建议,调整相关参数以适应 HDD 环境。
硬件升级:如果条件允许,建议尽快将机械硬盘升级为固态硬盘,以获得更好的性能表现。
定期维护:定期进行硬件和软件的维护,确保系统处于最佳状态。
如果您需要更详细的帮助或有其他问题,请提供更多的日志信息或联系 OceanBase 的技术支持团队。希望以上建议能帮助您解决问题。
根据 fio
测试结果,HDD 的随机读性能非常低,这是导致 OceanBase 数据库性能显著下降的主要原因。建议优先考虑硬件升级,同时结合数据库配置优化和监控诊断,以全面提升系统性能。
详情请参考:
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
随机写入还挺快的,为什么数据库写入很慢
一般随机读低,随机写也不会高。可以再测试一下。是否有ssd磁盘可以切换呢,更换一下硬件测试一下
没有ssd
obdiag收集SQL性能问题信息
obdiag gather scene run --scene=observer.perf_sql --env “{db_connect=’-hxx -Pxx -uxx -pxx -Dxx’, trace_id=‘xx’}”
可以分析出sql慢在哪一步
目前我们写入慢
机械磁盘慢这是预期内的,建议更换ssd磁盘
我们的其中一个集群也使用了HDD,性能确实有差距