http://www.orczhou.com/index.php/2010/12/more-about-mysql-innodb-shutdown/
http://www.orczhou.com/index.php/2014/03/some-tricky-about-mysqladmin-extended-status/
https://dbarobin.com/2015/08/29/mysql-optimization-under-ssd/
https://www.percona.com/blog/2016/05/05/percona-server-5-7-multi-threaded-lru-flushing/
https://yq.aliyun.com/articles/40903?spm=5176.8091938.0.0.b6sdPr
https://yq.aliyun.com/groups/25
http://mysql.taobao.org/index.php?title=MySQL%E5%86%85%E6%A0%B8%E6%9C%88%E6%8A%A5_2015.02 快速关闭MySQL/InnoDB 如果用的引擎是InnoDB,每次敲下mysqladmin -uroot -p shutdown关闭数据库的时候,总是很难预测这个命令会执行多久,实际经验表明,短则五秒,长则三十分钟一小时都有可能。也分享一下我的经验吧。 . 为什么InnoDB关闭会慢?
事实上,并不是每次关闭InnoDB都很慢的。Why?InnoDB较之MyISAM,一个重要特性是InnoDB会在内存中开辟一个Buffer Pool来存储最近访问的数据块/索引块,使得下次再次访问这个块时速度能够很快。当InnoDB对需要修改数据块的时候,会先记录修改日志,然后直接对Buffer_Pool中的数据块的操作。记录日志是顺序写,对数据块的操作是内存操作,这让InnoDB在很多场景下有这很好的速度优势。 上面对内存块修改完成后,InnoDB就向客户端返回了。可这时实际磁盘上的数据块,还并没有被更新,我们把这样的page称为Dirty Page。在InnoDB的后台有一个专门的线程来做将内存数据块Flush到磁盘的工作。这个Flush操作就是主要影响InnoDB关闭时间的因素。在关闭MySQL/InnoDB时,所有的Dirty_Page都需要Flush,所以Dirty_Page越多,要Flush的数据块也就越多,意味着InnoDB关闭时间越长。 我们可以通过下面的命令来观察Dirty Page的数量: mysqladmin -uroot ext -i |grep "Innodb_buffer_pool_pages_dirty"
. 参数innodb_max_dirty_pages_pct
Buffer_Pool中Dirty_Page所占的数量,直接影响InnoDB的关闭时间。参数innodb_max_dirty_pages_pct可以直接控制了Dirty_Page在Buffer_Pool中所占的比率,而且幸运的是innodb_max_dirty_pages_pct是可以动态改变的。 所以,在关闭InnoDB之前先将innodb_max_dirty_pages_pct调小,强制数据块Flush一段时间,则能够大大缩短MySQL关闭的时间。 set global innodb_max_dirty_pages_pct=;
一般执行了上面的命令之后,Dirty_Page的Flush仍需要一段时间,所以要稍等一会儿,再关闭MySQL才有效果。 . 关闭前做些什么
有时候,就算你改变innodb_max_dirty_pages_pct=,仍然不能保证InnoDB快速关闭。还有一些注意事项。 设置数据库为只读:如果数据库一直是活跃的,有连接在向里面写数据,那么Dirty Page则还可能不断的产生。 如果是备库,在innodb_max_dirty_pages_pct设置成0的同时,最好先stop slave:这个很关键,而且对关闭时间影响也会很大。第一,主动stop slave后,MySQL在关闭时,需要停止的线程其实是更少了的。第二,如果slave的SQL线程还在执行的话,Buffer Pool则还在活动,Dirty Page也可能还会不断的增多。 一般,如果注意到了上面三点: set global innodb_max_dirty_pages_pct=
set global read_only=
stop slave
关闭数据库,就会很快了。如果你把上面三步做完,然后观察Dirty Page的数量,当数量很少时,再执行命令关库,这样总能保证以较快的速度完成关库命令。 . 一个注意事项
这里需要注意的是,你不需等到Dirty Page的数量到零,才开始关闭MySQL。因为有时候,即使已经没有活动的会话时,InnoDB的Insert Buffer的合并仍然会产生一些Dirty Page,所以这时你可能会发现,等了很久很久很久Dirty Page的数量仍然大于零。 其实这时,你已经可以快速的关闭数据库了。我怎么判断这种情况呢?这时我们可以通过InnoDB的LSN来判断,下面是SHOW InnoDB Status里面获取的信息: Log sequence number
Log flushed up to
Last checkpoint at
这里看到,当前的LSN是814 ,最后一个检查点在814 ,也就是说两者相差了3121743145-=,那么意味着InnoDB还有很多Dirty Page需要Flush。 下面是另一个库的LSN信息: Log sequence number
Log flushed up to
Last checkpoint at
可以看到,这里的Dirty Page都已经Flush了,那么关闭InnoDB也就很快了。 一般,并不需要等到最后检查点和当前LSN相等才关闭,两者只要相差不多(<)关闭起来就很快了。 . 最后再罗嗦一下
我这个人写博客很罗嗦的,各位看官在忍耐一下吧。 其实,像上面这样折腾,整个关库的过程有可能并不比你直接执行mysqladmin -uroot shutdown快,但是执行上面的步骤,会让你清楚关库到底与多久,可以让你的关库命令能够在一个可以预期的时间内完成。简单的说,会让关库的时间心里有个底。 当你希望一切都心里有底的时候,那你就需要注意上面提到的一些细节。

Innodb_buffer_pool_pages_dirty [一个故事@MySQL DBA]MYSQL的更多相关文章

  1. 我心中的MySQL DBA

    原文网址链接:http://wangwei007.blog.51cto.com/68019/1718311 MySQL是一个跨平台的开源关系型数据库管理系统,目前MySQL被广泛地应用在Interne ...

  2. 招聘前端、Java后端开发、测试、Mysql DBA

    公司介绍: http://www.lagou.com/gongsi/43095.html http://www.yamichu.com 简历发到: zhuye@yamichu.com 招聘职位: JA ...

  3. MySQL DBA的个人修养

    做为一个MySQL DBA,必须具有以下的素质: 一, 身体素质 DBA必须接收和处理各种报警,不论是中午在吃饭或者凌晨三点已经进入深度睡眠.接到报警需要立即进入应急状态,找到电脑,联上网络,快速定位 ...

  4. MySQL DBA面试全揭秘

    来源:http://ourmysql.com/archives/1426 本文起源于有同学留言回复说想了解下MySQL DBA面试时可能涉及到的知识要点,那我们今天就来大概谈谈吧. MySQL DBA ...

  5. Mysql DBA 20天速成教程,DBA大纲

    Mysql DBA 20天速成教程 基本知识1.mysql的编译安装2.mysql 第3方存储引擎安装配置方法3.mysql 主流存储引擎(MyISAM/innodb/MEMORY)的特点4.字符串编 ...

  6. MySQL DBA教程:Mysql性能优化之缓存参数优化

      在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感 ...

  7. MySQL DBA修炼秘籍

    0.导读 本文主要写给那些立志成为MySQL DBA,以及正在学习MySQL的同行们,结合个人及业内其他同行的职业发展经历给大家一些参考,如何成为合格的MySQL DBA. 1.什么是MySQL DB ...

  8. “快的打车”创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - V2EX

    "快的打车"创始人陈伟星的新项目招人啦,高薪急招Java服务端/Android/Ios 客户端研发工程师/ mysql DBA/ app市场推广专家,欢迎大家加入我们的团队! - ...

  9. 一个参数引起的mysql从库宕机血案

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://suifu.blog.51cto.com/9167728/1859252 一个参数 ...

随机推荐

  1. svn服务器时间与本地时间不同步解决

    在用svn的时候,由于svn的时间与本地不同步,导致每次看log总是需要对时间. 今天修改了svn服务器时间与本地同步.只需要修改svn服务器时间与本地时间相同即可,但要主要修改时区,不然会出现时间又 ...

  2. dictionary ----- python

    Learn of dictionary,simple example of dictionary in  “Simple Python tutorial"------------------ ...

  3. Scroll view 备忘

    Stroyboard中使用ScrollView 当我们使用Storyboard开发项目时,如果要往控制器上拖入一个ScrollView并且添加约束设置滚动区域,是有特殊的规定的: 拖入一个scroll ...

  4. 《深入剖析Tomcat》阅读(二)

    Tomcat是基于Sun公司标准的开源Servlet容器. Servlet是什么? Servlet(Server Applet),全称Java Servlet,未有中文译文.是用Java编写的服务器端 ...

  5. 你一定要知道的关于Linux文件目录操作的12个常用命令

    写在前面: 1,<你一定要知道的关于Linux文件目录操作的12个常用命令>是楼主收集的关于Linux文件目录操作最常用的命令,包括文件或目录的新建.拷贝.移动.删除.查看等,是开发人员操 ...

  6. bzoj 1014: [JSOI2008]火星人prefix hash && splay

    1014: [JSOI2008]火星人prefix Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3154  Solved: 948[Submit][ ...

  7. 【andorid】Attribute is missing the Android namespac

    初学安卓,错误颇多 出现这个问题,是因为xml节点属性单词拼写错了,比如android我写成了adnorid,当然就错误了.

  8. Autofac 之 基于 Castle DynamicProxy2 的 Interceptor 功能

    Autofac 结合 Castle DynamicProxy2 功能        Autofac 不仅作为轻量级高效的 IoC 容器,而且还能很好的与 Castle.DynamicProxy2 结合 ...

  9. HDU-2126 Buy the souvenirs

    数组01背包. http://acm.hdu.edu.cn/showproblem.php?pid=2126 http://blog.csdn.net/crazy_ac/article/details ...

  10. PHP的哲学:Simple Is Hard

    原帖地址 PHP框架的繁荣是正确的发展方向吗?   作者 正文 poshboytl    发表时间:2009-01-19   最后修改:2009-04-06   做ROR有一年了, 感觉非常好.配合敏 ...