mysql案例 ~ 关于drop的那点事


1 关于中断session操作
     mysql如果在前台执行drop table操作,中断了前台session 
     1 经过我测试,会执行成功,但是mysql.err会记录一些错误.而且删除后确实可以创建同名表
     2 中断的时机不同,报错的日志可能不一样
     3 手动ctrl+c kill xshell断开连接 这三者对于drop table 都一样
     4 记住任何前台操作一定要执行后台操作,不然会有危险,养成良好习惯
2 关于drop 大表
    0 选择在业务不繁忙的情况
    1 rename table to table_new 这样是为了将bf中的关于该表的脏页刷新到磁盘中
    2 ln table_new table_new.delete 建立linux硬链接
    3 drop table
    4 linux实现删除表 利用truncate命令
     TRUNCATE=/usr/local/bin/truncate
     for i in `seq 2194 -1 1 `;
     do
    sleep 2
    $TRUNCATE -s ${i}G /data/mysql/mytest/erp.ibd.hdlk
    done
    rm -rf /data/mysql/mytest/erp.ibd.hdlk 

   3  drop 操作最新总结

          可能触发的动作 

            1 AHI短时间内会释放大量的内存

           2 表的脏页会刷新到磁盘

          3 针对ibd文件会执行delete操作

        可能的观察参数

           1 innodb_buffer_pool_pages_misc大量释放,Innodb_buffer_pool_pages_free值同时增长,释放和增加的内容总量基本一致

           2 在SEMAPHORES相关信息中,可以看到hang死期间大量Thread请求S-lock

        可能导致问题

         1 mysql thread hung

         2 page cleaner 超时

       总结

         drop table引起的MySQL 短暂hang死的问题,是由于drop 一张使用AHI空间较大的表时,调用执行AHI的清理动作,会消耗较长时间,执行期间长时间持有dict_operation_lock的X锁,阻塞了其他后台线程和用户线程;

        drop table执行结束锁释放,MySQL积压的用户线程集中运行,出现了并发线程和连接数瞬间上升的现象。规避问题的方法,可以考虑在drop table前关闭AHI。

    

 

posted @ 2019-09-05 11:15  开心的蛋黄派  阅读(857)  评论(0编辑  收藏  举报