zoukankan      html  css  js  c++  java
  • mysql删除大表更快的drop table办法

    mysql删除大表更快的drop table办法


    参考资料:
    https://blog.csdn.net/anzhen0429/article/details/76284320

      利用硬链接和truncate降低drop table对线上环境的影响

      在DROP TABLE的时候,所有进程不管是DDL还是DML都被HANG起;直到DROP结束才继续执行;这是因为INNODB会维护一个全局独占锁(在table cache上面),

    直到DROP TABLE完成才释放。在我们常用的ext3,ext4,ntfs文件系统,要删除一个大文件(几十G,甚至几百G)还是需要点时间的。

      下面我们介绍一个快速DROP table 的方法; 不管多大的表,INNODB 都可以很快返回,表删除完成;

    [root@my1-222 ~]# ll  /data/mysql/mysql_3306/data/db222/t2* -th
    -rw-r-----. 1 mysql mysql 2.0G May 29 22:39 /data/mysql/mysql_3306/data/db222/t2.ibd
    -rw-r-----. 1 mysql mysql 8.5K May 29 21:51 /data/mysql/mysql_3306/data/db222/t2.frm
    [root@my1-222 ~]# 


    直接使用DROP TABLE来完成删表动作,那么这条语句要执行很长时间。此时便可以通过在该表对应的数据文件上设置硬链接来进行删除。

    1、如果是主从架构,请在所有机器上创建硬链接

    创建方法都很简单:
    软链接(符号链接) ln -s   source  target
    硬链接 (实体链接)ln       source  target

    ln /data/mysql/mysql_3306/data/db222/t2.ibd  /data/mysql/mysql_3306/data/db222/t2.ibd.hdlk
    # 进入mysql,执行删除表
    drop table t2;


    2、然后去操作系统中删除真正的大物理文件

    for i in `seq 50 -1 1 ` ;do sleep 2;truncate -s ${i}G /data/mysql/mysql_3306/data/db222/t2.ibd.hdlk;done  
    rm -rf /data/mysql/mysql_3306/data/db222/t_user.ibd.hdlk  


    从2G开始,每次缩减1M,停2秒,继续直到文件只剩1G,最后使用rm命令删除剩余的部分。
    (文件越大,越能体现出来,这里是测试,文件只有2G,可以将其修改为M)

  • 相关阅读:
    centos7内核优化
    MYSQL存储过程,函数,光标
    牛客网计算机考研复试-KY10-球的半径和体积
    牛客网计算机考研复试-KY11-二叉树的遍历
    #include <graphics.h>的解决
    牛客网计算机考研复试-KY30-进制转换
    牛客网计算机考研复试-KY9-成绩排序
    牛客网计算机考研复试-KY8-整数拆分
    牛客网计算机考研复试-KY4-代理服务器
    牛客网计算机考研复试-KY5-反序输出
  • 原文地址:https://www.cnblogs.com/bjx2020/p/9105044.html
Copyright © 2011-2022 走看看