zoukankan      html  css  js  c++  java
  • MySQL快速删除大表 内参第一部分第17章

    MySQL drop table分为两个过程

    1.buffer pool中flush list清除

      根据space_id来查找buffer pool中的每一个实例,flush list中包含该表的页面直接清除(实际上是设置标志位),并不会直接的flush disk

      两个锁:buffer pool mutex和flush list mutex,如果buffer pool很大,或者buffer pool中需要被flush的页面很多,则持有这两个锁的时间就会很长,阻塞了该buffer pool实例中的其他事务,所以大表的drop操作很可能会影响业务

    2.删除ibd文件

      如果文件过大,会带来大量的IO,并且耗时

    解决方案

    针对ibd文件过大,可以创建硬链接,drop table时,并不会真正的删除物理文件,只是完成一个逻辑上的操作,待drop操作结束后,再在os层面删除物理文件

    os层分块truncate删除物理文件

    gelara处理

    每个节点执行

    (1)set @@session.wsrep_on=OFF;

    (2)ln /data/mysql/testdb/exptab.ibd /data/mysql/testdb/exptab.ibd.hl

    (3)drop table;

    (4)rm -f /data/mysql/testdb/exptab.ibd.hl

    也可以先处理物理文件

    参考运维内参

  • 相关阅读:
    APIO2007 动物园
    SCOI2010 股票交易
    USACO13NOV No Change G
    洛谷 P3694 邦邦的大合唱站队
    洛谷 P6196 3月月赛 ERR1 代价
    洛谷月赛 ERR1 代价
    Splay 学习笔记
    HNOI2009 梦幻布丁
    乘法逆元
    【洛谷】【二分答案+最短路】P1462 通往奥格瑞玛的道路
  • 原文地址:https://www.cnblogs.com/geek-ace/p/9366718.html
Copyright © 2011-2022 走看看