MYSQL百G大表正确清空方式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL百G大表正确清空方式相关的知识,希望对你有一定的参考价值。

当我们遇到大表清空时,会有几种相应的操作方法(表player):

1. truncate table player;
2. 创建新表、rename表、然后直接drop老表
3. 创建新表、rename表、创建老表硬链接、slowrm进行大文件删除。

注:创建新表时,需要提前和开发沟通用来确认新表自增ID起始位置

下面将是几种方案的操作步骤以及优劣势

1.操作步骤:
    * truncate table player;

    优势:操作简单
    劣势:表产生元数据锁,机器资源占用过高。
    结论:强烈不推荐使用
2.操作步骤:
    * create table player_new like player;
    * rename table player to player_old_del, player_new to player;
    * drop table player_old_del;

    优势:减少锁时间,表切换业务基本无感
    劣势:drop 表依然会产生大量机器IO占用,导致mysql性能急剧下降
    结论:此方案可以在业务低峰期执行。
3.操作步骤:
    * create table player_new like player;
    * rename table player to player_old_del, player_new to player;
    * 在OS层为player_old_del.ibd文件创建硬链:ln player_old_del.ibd player_old_del.ibd.ln
    * drop table player_old_del;
    * 通过slowrm限制删除硬链文件:slowrm -f -s 1 -b 1073741824 player_old_del.ibd.ln(注:SSD类磁盘基本IO使用率控制在20%左右)

    优势:减少锁时间,表切换业务基本无感,drop 表以及删除大文件不会对业务产生影响。
    劣势:操作繁琐,需要去每个slave节点创建硬链接并且进行删除。
    结论:推荐此方法,建议把操作封闭成脚本化。

    在对数据库进行任何DDL操作时,不仅要关注数据库层面影响,而且还要对于当前系统层影响做出相应判断。

以上是关于MYSQL百G大表正确清空方式的主要内容,如果未能解决你的问题,请参考以下文章

MySQL大表清空和删除正确方法

mysql数据库百万级以上数据,如何对其进行边查询变更新?

如何在低规格系统上的大表上提高 MySQL 性能?

MySQL8数据迁移大表捷径【表空间迁移】

如何增强对数百万行表的 MySQL 查询?

Salesforce使用truncate清空数据库