欢迎访问OceanBase官网获取更多信息:https://www.oceanbase.com/
导致 observer 所在节点 IO 压力过大的原因有很多,除了流量上涨外,通常是迁移复制、合并等因素叠加的结果。处理的思路通常是将一些高 IO 的负载任务降级,本文针对各种情况进行详细分析。
应急处理流程
针对节点磁盘 IO 过高的情况,处理的思路通常是将一些高 IO 的负载任务降级,具体分如下几种情况。
暂停进行中的合并。
磁盘 IO 过高的节点若是正在进行合并,可以将其暂停,以缓解 IO 压力。暂停合并,命令如下所示:
ALTER SYSTEM SUSPEND MERGE [ZONE [=] 'zone'];等 IO 压力缓解后,您可以根据需要恢复合并,语法如下所示:
ALTER SYSTEM RESUME MERGE [ZONE [=] 'zone'];暂停执行中的备份任务。
您可以通过 OCP 查看当前节点是否正在进行备份,如果是,可以暂停备份,以缓解 IO 压力。
暂停执行中的数据传输或导入/导出任务。
您可以直接通过在 OCP 中的 TOPSQL、会话管理功能排查正在批量写入的 SQL,如果不能快速判断跑批任务来自哪个系统,也可以直接通过 OMS 查看当前节点是否正在进行数据传输任务,如果是的话,可以根据需要将其暂停,缓解 IO 压力后再继续执行。 更多信息可以阅览 管理迁移任务。
您还可以通过 ODC 查看当前节点是否正在进行导数,在 任务中心 面板的 导入 页签查看任务列表。进入目标数据库连接后,单击上方导航栏中的 任务 标签弹出任务中心面板,在面板中单击 导入 页签展示任务列表,进入导入任务页签后,可以根据需要进行 终止 和 重试 操作。更多信息可以阅览 导入任务。此外,其他第三方的大数据平台、DataX 组件也可能存在定时执行的任务,可以按需手动停掉。
调低转储线程数
转储时并行度过高会导致磁盘的 IO 随之增高,
minor_merge_concurrency是控制并行转储线程数,您可以通过调低该参数值来降低磁盘的 IO 使用率。该参数默认值为0,表示自适应,64C一般为10,可以根据情况调小。修改该参数无需重启直接生效。语法如下所示:ALTER SYSTEM SET minor_merge_concurrency= 5;修改成功后,可以通过
SHOW PARAMETERS语句查看是否修改成功。SHOW PARAMETERS LIKE 'minor_merge_concurrency';您还可以在 OCP 界面通过修改转储策略调低转储线程数,具体参见 修改转储配置。
调低迁移复制的并发数。
当问题发生期间 OB 集群中如果恰好有 unit 迁移,或者副本均衡类的任务。此时可以通过限制迁移的并发数来达到 IO 限流的目的。
ALTER SYSTEM SET migrate_concurrency=5; --默认值为 10 ALTER SYSTEM SET server_data_copy_in_concurrency=2; --默认值为 2,如果高于该值,可以调回 2 ALTER SYSTEM SET server_data_copy_out_concurrency=2; --默认值为 2,如果高于该值,可以调回 2调低后台任务的网络带宽。
您可以使用如下命令来调低后台任务的网络带宽:
ALTER SYSTEM SET sys_bkgd_net_percentage=30; --默认值 60对高负载的 SQL 执行限流、添加索引。
当磁盘 IO 过高,定位到某条 SQL 时,可以通过绑定 SQL 的执行计划加入 hint max_concurrent 来限制 SQL 并发,实现对 SQL 的限流。更多信息请参见 《SQL 参考(MySQL 模式)》 中的 SQL语句 。
因为索引缺失导致的全表扫描,造成 IO升高,可以根据具体需要对相关表加索引。
取消进行中的索引创建。
如果当前集群中正在执行大表的索引创建,可以酌情取消,待集群恢复后再进行创建。
欢迎访问OceanBase官网获取更多信息:https://www.oceanbase.com/




