java批量删除分表mysql_MySQL10亿+表数据进行批量删除操作

本文讨论了一次数据库大表清理操作,表中存储了10亿+条日志数据,超过600G。由于程序错误,需要删除11月17日前的数据。研发提出使用分批删除的SQL脚本来避免一次性大事务,但发现删除后空间未被回收。解决方案包括重建索引或使用ALTER语句来回收空间。
摘要由CSDN通过智能技术生成

因为开发人员上线的定时删除数据的程序没有执行,坑啊~ 导致了数据库表数据量达到10亿+。

开发人员的需求是只需保留一个月的数据即可,数据都是一些java日志。所以提了需求删除数据的数据库变更。

表数据统计如下:

130e02a58073f7c8011c9367cac8bdb6.png

因为该表的id为自增主键,也可以通过最大最小id进行行数的估算。

ea5a43438182d25695f18868de39ca4a.png

统计表大小,索引加数据文件一共600多G

333b796787990d44fbbd02a8629dac53.png

本次的数据变更需求为删除11月17号之前的数据,即日志数据只需保留一个月即可。研发人员提供的SQL如下:即要删除6亿行数据,真的是一次大的变动。

delete from java_decision_detail_log where id < 694859879;

考虑到一次批量删除6亿数据是一个超大事务,执行完成后造成主从延迟。

索引考虑打散执行。

脚本如下,每次删除100万行数据,

56bcd4cea8e5c372c0d01d64250a5902.png

这样删除在操作系统上看数据文件的大小没有减小反而增加,空间没有回收,如果想要回收需要进行重建或者alter语句就可以实现,这样按主键删除应该是把一个页上的数据都删掉,空间也许可以复用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在MySQL中对分表进行批量修改结构的操作,可以使用存储过程来实现。下面是一个示例的存储过程代码: ```sql /** 判断存储过程是否存在,否则删除 */ DROP PROCEDURE IF EXISTS batchUpdate; /** 声明存储过程 */ CREATE PROCEDURE batchUpdate() BEGIN DECLARE tableName VARCHAR(20) DEFAULT ''; DECLARE done INT DEFAULT 0; DECLARE tableNames CURSOR FOR SELECT table_name FROM information_schema.tables WHERE table_schema='bianmin_trade' AND table_name LIKE 'bill_20%'; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN tableNames; REPEAT FETCH tableNames INTO tableName; IF NOT done THEN SET @sql = CONCAT('ALTER TABLE ', tableName, ' ADD payment_type TINYINT(2) NOT NULL DEFAULT 3 COMMENT "缴费类型";'); PREPARE stmt FROM @sql; EXECUTE stmt; END IF; UNTIL done END REPEAT; CLOSE tableNames; END; /** 执行存储过程 */ CALL batchUpdate; /** 删除存储过程 */ DROP PROCEDURE IF EXISTS batchUpdate; ``` 此存储过程中,我们使用游标来遍历符合条件的名,并执行ALTER TABLE语句来批量增加一个名为payment_type的字段。你只需要将存储过程中的数据库名、名和字段名根据你的实际需求进行相应的替换即可。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Mysql按日分表如何实现批量修改结构](https://blog.csdn.net/qq_36367121/article/details/108799799)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Mysql PROCEDURE 批量修改结构](https://blog.csdn.net/xingnang2008/article/details/94735437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值