zoukankan      html  css  js  c++  java
  • 测试快速关闭innodb的方法

    测试mysqlporformanceblog提供的减少关闭innodb时间的方法 
    经常发现一些MySQL镜像库的InnoDB的关闭时间会特别久,mysqlperformanceblog给出了一个不错的解决方案 
    How to decrease InnoDB shutdown times http://www.mysqlperformanceblog.com/2009/04/15/how-to-decrease-innodb-shutdown-times/ 
    InnoDB关闭的过程解释 
    MySQL官方手册介绍 影响到InnoDB关闭的参数有 

    innodb_fast_shutdown 
    如果你把这个参数设置为0,InnoDB在关闭之前做一个完全净化和一个插入缓冲合并。这些操作要花几分钟时间,在极端情况下要几个小时。 
    如果你设置这个参数为1,InnoDB在关闭之时跳过这些操作。 默认值为1。 
    如果你设置这个值为2 (在Netware无此值), InnoDB将刷新它的日志然后冷关机,仿佛MySQL崩溃一样。已提交的事务不会被丢失,但在下一次启动之时会做一个崩溃恢复。 


    innodb_max_dirty_pages_pct 
    这是一个范围从0到100的整数。默认是90。InnoDB中的主线程试着从缓冲池写页面,使得脏页(没有被写的页面)的百分比不超过这个值。如果你有SUPER权限,这个百分比可以在服务器运行时按下面来改变: 
    SET GLOBAL innodb_max_dirty_pages_pct = value; 



    100423  0:10:18  InnoDB: Starting shutdown… 
    100423  0:10:20  InnoDB: Shutdown completed; log sequence number 0 4000976145 
    100423  0:10:20 [Note] /usr/sbin/mysqld: Shutdown complete 


    测试环境 
    1.在一个镜像库节点进行测试,innodb_buffer_pool_size=1G 
    2.在一个线上节点进行测试,碰巧这个节点要进行机架更换,所以可以趁机测试一把 
    innodb_buffer_pool_size=12G,线上环境和镜像环境还是有点不一样,没法让Innodb_buffer_pool_pages_dirty的值少于1000,虽然是大于1000,但关闭起来还是比较快速的 

    测试过程 
    正常关闭的normal-shutdown.sh 

    #!/bin/bash 
    #正常关闭innodb 
    log=”normal-shutdown.log” 
    start_time=`date` 
    echo “start time:”$start_time > $log 
    mysqladmin –defaults-file=db-32-1.cnf -uxxx -pxxx  ext  | grep dirty >> $log 
    mysqladmin –defaults-file=db-32-1.cnf -uxxx -pxxx shutdown 
    end_time=`date` 
    echo “end time:” $end_time >> $log 
    normal-shutdown.log 输出的日志如下 

    start time:2010年 06月 18日 星期五 17:21:00 CST 
    | Innodb_buffer_pool_pages_dirty    | 43492        | 
    end time: 2010年 06月 18日 星期五 17:23:10 CST 
    设置set global innodb_max_dirty_pages_pct =0的关闭方式 

    首先执行 mysql –defaults-file=db-31-2.cnf -uxxx -pxxx -e” set global innodb_max_dirty_pages_pct =0“ 
    经过了大概3分钟后 Innodb_buffer_pool_pages_dirty的值少于1000 
    然后执行faster-shutdown.sh,生成faster-shutdown.log 
    #!/bin/bash 
    log=”faster-shutdown.log” 
    start_time=`date` 
    echo “faster shutdown start time:”$start_time >$log 
    mysqladmin –defaults-file=db-32-1.cnf -uxxx -pxxx  ext  | grep dirty >> $log 
    mysqladmin –defaults-file=db-32-1.cnf -uxxx -pxxx shutdown 
    end_time=`date` 
    echo “faster shutdown end time:” $end_time >>$log 
    faster-shutdown.log的内容 
    faster shutdown start time:2010年 06月 18日 星期五 17:47:08 CST 
    | Innodb_buffer_pool_pages_dirty    | 569        | 
    faster shutdown end time: 2010年 06月 18日 星期五 17:47:12 CST 
    关闭时间比较 

    正常关闭 快速关闭 
    Innodb_buffer_pool_pages_dirty 43492 569 
    关闭时间 2分10秒 4秒 
    结论 
    日常维护中,可以使用set global innodb_max_dirty_pages_pct =0,让Innodb_buffer_pool_pages_dirty 的数值为一个较小的值,这样就可以减少在关闭mysql服务器中耗费在innodb的时间 
    最终达到减少影响用户的时间 

  • 相关阅读:
    Bzoj3555: [Ctsc2014]企鹅QQ
    Bzoj4259: 残缺的字符串
    CF528D Fuzzy Search
    Bzoj2738: 矩阵乘法
    Bzoj3309: DZY Loves Math
    Bzoj4540: [Hnoi2016]序列
    Bzoj2329: [HNOI2011]括号修复
    Bzoj1923: [Sdoi2010]外星千足虫
    Bzoj4004: [JLOI2015]装备购买
    Bzoj1951: [Sdoi2010]古代猪文
  • 原文地址:https://www.cnblogs.com/mydriverc/p/8301533.html
Copyright © 2011-2022 走看看