zoukankan      html  css  js  c++  java
  • 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。

        

  • 相关阅读:
    初始ASP.NET数据控件【续 DataList】
    初始ASP.NET数据控件GridView
    初始ADO.NET数据操作
    初识 Asp.Net数据验证控件
    【Socket编程】Java通信是这样炼成的
    JAVA之I/O 输入输出流详解
    浅入深出之Java集合框架(下)
    浅入深出之Java集合框架(中)
    浅入深出之Java集合框架(上)
    全面解释java中StringBuilder、StringBuffer、String类之间的关系
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/11464683.html
Copyright © 2011-2022 走看看