问题现象
恢复介质性能差的情况下用户取消物理恢复任务。
ALTER SYSTEM CANCEL RESTORE xxx;查询视图
CDB_OB_RESTORE_PROGRESS,视图中已经没有记录。但是查看内部表
__all_virtual_sys_task_status,物理恢复实际上仍然有任务在进行。
关键诊断信息
触发条件
恢复介质性能差的情况下取消物理恢复。
事前巡检
检查恢复介质(NFS 或对象存储)的负载,测试读写性能,根据恢复数据量确认带宽与 RT 等指标能够满足恢复的要求。
事后诊断
恢复介质性能差的情况下用户取消物理恢复任务。
ALTER SYSTEM CANCEL RESTORE xxx;
取消物理恢复一段时间后,执行如下语句。
-- 仍然有记录
select * from oceanbase.__all_virtual_sys_task_status where dag_type like "%RESTORE%";
问题原因
为什么执行
ALTER SYSTEM CANCEL RESTORE后无法立即取消恢复任务?因为这个命令本质上是删除正在恢复的租户,而删除租户必须要等待恢复租户的拷宏块 dag 任务结束;在弱网环境下,该 dag 执行得很慢,导致恢复无法立即取消。
为什么执行了
ALTER SYSTEM CANCEL TASK仍然无法取消恢复?因为当前没有对拷宏块的任务(
physical_copy_task)打点,即使执行了 cancel task 命令,该任务也无法感知到自己已经被取消了,所以还是得等任务执行完。
问题的风险及影响
取消恢复后长时间租户资源没有完全释放。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响版本
OceanBase 数据库企业版 V4.1.0 GA(oceanbase-4.1.0.0-100001122023040322)及之后版本、V4.2.0 GA(oceanbase-4.2.0.0-100010082023083014)及之后版本、V4.2.1 GA(oceanbase-4.2.1.0-100000182023092722)及之后版本、V4.2.2 GA(oceanbase-4.2.2.0-100000082024011317 )及之后版本、V4.3.0(oceanbase-4.3.0.0-100000072024020200)及之后版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库 V4.2.1 BP8(oceanbase-4.2.1.8-108000052024072217)、V4.2.4(oceanbase-4.2.4.0-100000252024070621)、V4.3.2(oceanbase-4.3.2.0-100000442024071321)。
重启资源没有释放的 OBServer。
规避方式
降低恢复介质的负载,保障恢复介质的性能能够满足物理恢复的需要。