DELETE 条件字段缺少索引导致 SuperSync 同步严重延迟

文章目录

环境

系统平台:银河麒麟 (海光)

版本:9.0.4

症状

使用 SuperSync 将 DB2 数据同步到 HGDB 时,同步任务累计延迟约 21 天。

初步分析认为同步瓶颈可能来自磁盘 I/O,但监控系统显示:

  • CPU 使用率约 5%
  • 内存使用率约 5%
  • 磁盘 I/O 利用率较低

系统整体资源使用正常,与同步延迟现象不符。

进一步查看数据库活动会话,发现仅有一个同步工具(dsg 用户)的 DELETE 语句持续执行。

复制代码
postgres: highgo-ee-cluster: dsg xxx DELETE

查看该 DELETE 进程的 I/O 使用情况:

复制代码
pidstat -d -p 2353843 1

输出如下:

复制代码
kB_rd/s     kB_wr/s    iodelay
7648        23168      5
16900       28920      9
5536        35416      4
......
2608        83448      3
4128        71756      4
71056       1696       38

可以看到:

  • DELETE 进程持续产生磁盘读写;
  • 写入速率最高约 83 MB/s;
  • iodelay 持续大于 0,说明该进程存在磁盘 I/O 等待。

进一步分析执行语句:

sql 复制代码
delete
from test_policymanagement.es_doc_pages
where pageid in (...);

发现:

  • 目标表大小约 187 GB;
  • pageid 字段未建立索引;
  • DELETE 每次执行均需要扫描大量数据定位待删除记录。

虽然 SQL 执行过程中真正等待磁盘 I/O 的时间占比不高,但由于全表扫描数据量巨大,导致单条 DELETE 执行时间长达十几分钟,最终造成同步任务持续积压,表现为同步延迟 21 天。

问题原因

目标表 test_policymanagement.es_doc_pages 数据量较大(约 187 GB),DELETE 语句的过滤字段 pageid 未建立索引,导致执行 DELETE 时发生全表扫描,SQL 执行效率极低,从而造成 SuperSync 同步任务持续积压。

解决方案

为 DELETE 条件字段 pageid 创建索引:

sql 复制代码
CREATE INDEX idx_es_doc_pages_pageid
ON test_policymanagement.es_doc_pages(pageid);

创建索引后,DELETE 语句可通过索引快速定位待删除记录,避免全表扫描,大幅降低 SQL 执行时间,SuperSync 同步效率恢复正常,同步延迟问题得到解决。

相关推荐
笃行3501 小时前
优化器凭什么改写你的 SQL:等价变换、条件调度与主流数据库的取舍
数据库
KaMeidebaby1 小时前
卡梅德生物技术快报|bli亲和力检测gst:告别批量跑胶:BLI实时酶切监测技术加速GST融合蛋白下游流程优化
前端·网络·数据库·人工智能·算法
千维百策6662 小时前
运用 SRE 原则降低生产事故影响:CRE 实战经验与可靠性优化方法
网络·数据库·人工智能
笃行3502 小时前
能跑不等于正确:生产环境不规范 SQL 的隐藏风险与编码规范
数据库
霸道流氓气质2 小时前
SpringBoot中基于 AES-GCM + KMS 密钥管理的数据加解密 Starter 实践
java·数据库·spring boot
吴声子夜歌2 小时前
MongoDB 4.x——应用设计调优
数据库·mongodb
三言老师3 小时前
CentOS7.9:Redis服务器部署结构化实战教程
linux·运维·服务器·数据库
番茄炒鸡蛋加糖3 小时前
MySQL 实战调优& 分表基础
数据库·mysql
Database_Cool_3 小时前
云数据库如何保证高可用、故障了怎么办:阿里云 RDS MySQL 高可用架构详解
数据库·mysql·阿里云