一个OceanBase集群在业务高峰期,所有租户突然出现大面积写入超时。
监控显示:
- freeze_trigger_percentage和 memstore_limit_percentage水位线持续高位。
- IO 延迟飙升,avg_fsync_time超过100ms。
- 但是,CPU利用率并不高。
最可能导致这种“内存写满、IO卡住、CPU空闲”异常现象的原因是什么,如何解决?
一个OceanBase集群在业务高峰期,所有租户突然出现大面积写入超时。
监控显示:
最有可能是磁盘写入延迟导致的,查看磁盘IO
坐等回复
也是
在这种情况下,OceanBase 集群面临的主要问题是租户的 MemStore 内存写满,同时伴随着 IO 延迟激增。尽管 CPU 利用率不高,但仍然发生了大规模的写入超时。这通常是由于以下原因造成的:
freeze_trigger_percentage 和 memstore_limit_percentage 水位线持续高位时,MemStore 内存可能已经接近或达到了其容量限制。这会导致写入操作被阻塞,因为 MemStore 没有足够的空间来存储新的数据。avg_fsync_time 超过 100ms 表明 IO 操作变得非常缓慢。这可能是由于磁盘压力过大、网络延迟或其他 IO 相关的问题导致的。writing_throttling_trigger_percentage 和 writing_throttling_maximum_duration 来开启写入限速功能,以防止 MemStore 内存进一步被写满。obclient> ALTER SYSTEM SET writing_throttling_trigger_percentage = 80;
obclient> ALTER SYSTEM SET writing_throttling_maximum_duration = '2h';
freeze_trigger_percentage 和 memstore_limit_percentage,以减少 MemStore 内存的压力,使其能够更快地转储数据。obclient> ALTER SYSTEM SET freeze_trigger_percentage = 70;
obclient> ALTER SYSTEM SET memstore_limit_percentage = 70;
oceanbase.DBA_OB_ROOTSERVICE_EVENT_HISTORY 表来监控集群的运行情况,及时发现并解决问题。SELECT `TIMESTAMP`,module,EVENT,name1,value1,name2,value2,rs_svr_ip
FROM oceanbase.DBA_OB_ROOTSERVICE_EVENT_HISTORY
WHERE module IN ( 'server', 'root_service', 'balancer' ) AND `TIMESTAMP` > SUBDATE( now(), INTERVAL 1 HOUR )
ORDER BY `TIMESTAMP` DESC LIMIT 50;
通过以上步骤,可以有效缓解和解决写入超时的问题。
检索到的文档如下: