当前位置: 首页 > news >正文

Percona pt-archiver 出现长事务



表结构
CREATE TABLE `operation_record` (`record_id` bigint NOT NULL COMMENT '主键',`enterprise_id` bigint DEFAULT NULL COMMENT '企业ID',`account_id` bigint DEFAULT NULL COMMENT '操作人ID',`user_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '操作人名称',`real_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '操作人名称',`handle_status` tinyint DEFAULT '1' COMMENT '处理状态. 1:成功 2:失败',`handle_status_desc` char(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '成功' COMMENT '处理状态. 1:成功 2:失败',`header` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '操作请求头',`in_body` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '操作请求内容',`out_body` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '操作响应内容',`business_no` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '业务单号',`business_id` bigint DEFAULT NULL COMMENT '业务ID',`message_id` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'MQ消息ID',`service_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '服务名称',`module_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '模块名称',`method` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '接口名称',`remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '功能描述',`desc` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '描述信息',`source_type` int unsigned NOT NULL COMMENT '来源方式类型',`source_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '来源方式名称',`user_agent` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 'User-Agent',`domain` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '域名',`source_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '来源IP',`handle_ip` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '事件处理节点的IP',`trace_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '观测云traceId',`create_time` datetime(3) NOT NULL COMMENT '创建时间',`update_time` datetime(3) NOT NULL COMMENT '修改时间',PRIMARY KEY (`record_id`),KEY `idx_business_no` (`business_no`),KEY `idx_business_id` (`business_id`),KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='操作记录表';

主键不是自增的



归档命令

/development/percona-toolkit-2.2.17/bin/pt-archiver \
--source h=rm-xxx.mysql.rds.aliyuncs.com,P=3306,u=db_user,p='123456',D=db0,t=operation_record \
--where "create_time<=''2025-04-24 08:00:00'" \
--charset=utf8 \
--no-version-check \
--no-check-charset \
--progress 1000 \
--limit=100 \
--txn-size 500 \
--statistics \
--no-safe-auto-increment \
--bulk-delete \
--purge

满足条件的数据有 482 条

执行归档命令,被’卡住’, 执行过程出现了长事务, 捕获到的SQL如下

SELECT /*!40001 SQL_NO_CACHE */ `record_id`,`enterprise_id`,`account_id`,`user_name`,`real_name`,`handle_status`,`handle_status_desc`,`header`,`in_body`,`out_body`,`business_no`,`business_id`,`message_id`,`service_name`,`module_name`,`method`,`remark`,`desc`,`source_type`,`source_name`,`user_agent`,`domain`,`source_ip`,`handle_ip`,`trace_id`,`create_time`,`update_time` FROM `db0`.`operation_record` FORCE INDEX(`PRIMARY`) WHERE (create_time<='2025-04-24 08:00:00') AND ((`record_id` >= '614730460908331008')) ORDER BY `record_id` LIMIT 100

EXPLAIN 查看执行计划

在这里插入图片描述
rows = 5759686. 没有使用 idx_create_time 索引.

修改归档命令,手动指定索引 i=idx_create_time

/development/percona-toolkit-2.2.17/bin/pt-archiver \
--source h=rm-xxx.mysql.rds.aliyuncs.com,P=3306,u=db_user,p='123456',D=db0,t=operation_record,i=idx_create_time \
--where "create_time<=''2025-04-24 08:00:00'" \
--charset=utf8 \
--no-version-check \
--no-check-charset \
--progress 1000 \
--limit=100 \
--txn-size 500 \
--statistics \
--no-safe-auto-increment \
--bulk-delete \
--purge

调整之后, 执行的SQL语句举例如下

SELECT /*!40001 SQL_NO_CACHE */ `record_id`,`enterprise_id`,`account_id`,`user_name`,`real_name`,`handle_status`,`handle_status_desc`,`header`,`in_body`,`out_body`,`business_no`,`business_id`,`message_id`,`service_name`,`module_name`,`method`,`remark`,`desc`,`source_type`,`source_name`,`user_agent`,`domain`,`source_ip`,`handle_ip`,`trace_id`,`create_time`,`update_time` FROM `db0`.`operation_record` FORCE INDEX(`idx_create_time`) WHERE (create_time<='2025-04-31') ORDER BY `create_time` LIMIT 100"

从 FORCE INDEX(PRIMARY) 变成 FORCE INDEX(idx_create_time)


http://www.dtcms.com/a/296226.html

相关文章:

  • 工具篇之开发IDEA插件的实战分享
  • Docker可用镜像列表
  • 飞算JavaAI “新增接口信息” 功能:让接口设计更贴合实际需求
  • 美光MTFC8GAKAJCN-4M_IT型eMMC应用介绍
  • 小模数齿轮的加工方法有哪些?
  • 冷热数据分离
  • 深入云原生构建(CNB):颠覆传统,构建未来
  • Spring Cloud OpenFeign 常用注解_笔记
  • 一文说清楚Hive
  • 1. boost::asio之socket的创建和连接
  • C++常见面试题/笔试收录(一)
  • ARM 学习笔记(四)
  • Cartographer安装测试与模块开发(一)--Ubuntu20.04下Cartographer安装与Demo测试
  • SELinux策略定制于VPS服务器安全加固的配置方法
  • 离线进行apt安装的过程(在只能本地传输的ubuntu主机上使用apt安装)
  • 【Web APIs】JavaScript 节点操作 ⑧ ( 删除节点 - removeChild 函数 | 删除节点 - 代码示例 | 删除网页评论案例 )
  • 网站域名修改以及后续DNS配置
  • Java泛型初始化ArrayList<String>()和ArrayList<>()的区别
  • Vue3实现视频播放弹窗组件,支持全屏播放,音量控制,进度条自定义样式,适配浏览器小窗播放,视频大小自适配,缓冲loading,代码复制即用
  • C++面试8——虚函数表(vtable)
  • 【华为】笔试真题训练_20250611
  • uni-app支付宝小程序样式穿透失效
  • 森马联合新华社推出纪实短片《蹲下来试试》,以“蹲”演绎「森柔牛仔」柔韧体验
  • Android Telephony UrspRule 介绍
  • Windows上用于跨平台开发的环境工具
  • 普通三方App一般只能使用安卓原生Framework提供的公开接口
  • 螺杆支撑座安装后如何检验它的稳定性?
  • 力扣面试150题--在排序数组中查找元素的第一个和最后一个位置
  • Java中的静态变量是在“堆“还是“方法区“?
  • 无人机微型风速风向仪:翱翔天际的 “风之侦探”