mysql数据库快速删除千万级数据

系统内有一只游戏日志表,每日以百万条数据增长,过段时间需要按照日期清理数据。同事使用delete循环删除过一次,时间久不说,表中的数据是删除了,但是查看服务器发现,*.idb文件大小居高不下,使用optimize table 表名 , 优化表以后,内存大小恢复正常。前前后后花费将近4个小时的时间。效率比较低,偶然想起TRUNCATE TABLE,决定使用以下方案,结果10分钟内,清除3千多万条废弃数据。记录以下,已备下次使用。

  • 1.创建临时表备份数据
CREATE TABLE user_game_log_old SELECT * FROM user_game_log where cts>1619798400000;
  • 2.截断表
TRUNCATE TABLE user_game_log;
  • 3.备份的数据插入到表中
INSERT INTO user_game_log SELECT * FROM user_game_log_old;
  • 执行 TRUNCATE TABLE 可能会出现Waiting for table metadata lock 锁表解决方案
1.登录数据库 执行 SHOW PROCESSLIST;
image.png
2.select * from information_schema.innodb_trx\G; 查询当前事务
image.png
3.kill **** ;杀死当前进程
image.png

按以上步骤,可以解决锁表问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容