码迷,mamicode.com
首页 > 其他好文 > 详细

msyql master thread

时间:2015-02-10 18:36:40      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

------------------------------------------------------ 2015-02-10------------------------------------------------------ 

本文只是简单介绍 msyql master thread 工作方式, 了解即可.

  innodb 1.0.x 版本之前的 master thread

  innodb 存储引擎的主要工作都在一个单独的后台线程中完成的.

  master thread 具有最高的线程优先级. 其内部又多个循环组成. : 主循环(loop),后台循环(background loop), 刷新循环(flush loop), 暂停循环(suspend loop). master thread 会跟据mysql运行状态在这几个循环中进行切换.

  loop :

    被称为主循环,因为大多数操作是在这个循环中进行的. 主循环使用 thread sleep来实现每秒/每10秒的间隔, 所以,这并不一定精确. 在负载很大的情况下,可能会有延迟.

    每秒一次的操作包括 :

    1.日志缓冲刷新到磁盘, 即使事务没有提交(commit).

        注意! 即使事务没有提交操作, innodb 重做日志缓存仍然会刷新到重做日志文件, 所以就算很大的事务操作的commit没有想象中那么慢.  

    2.合并插入缓冲(可能);

        合并插入缓冲不一定每秒都执行, innodb引擎会判断当前1秒内发生的IO次数是否小于5次, 如果小于5次.则合并插入缓冲.

    3. 最多刷新100个 innodb缓冲池中的脏页到磁盘(可能)

        innodb存储引擎通过判断当前缓冲池中脏页的比例()是否超过配置文件中innodb_max_dirty_pages_pct这个参数的值(默认为90, 表示90%).如果超过了这个阀值 ,innodb存储引擎则认为需要做磁盘同步操作,刷新100个脏页到磁盘.

             4. 如果当前用户没有活动, 切换到 background thread (可能)

    

      每10秒执行的操作 :

     1 .刷新100个脏页到磁盘 (总是)

       2. 合并最多5个插入缓冲(总是)

       3. 将日志缓冲刷新到磁盘(总是)

     4. 删除无用的Undo页(总是)

       5. 刷新100个或者10个脏页到磁盘(总是)

           在10秒的循环操作中. innodb存储引擎首先判断过去10秒内的磁盘IO操作是否小于200次, 如果小于,则将100个脏页刷新到磁盘.  然后合并 (最多5个)插入缓冲, 然后将重做日志缓冲刷新到日志文件.然后,innodb存储引擎会执行一次full purge. 既删除无用的undo页. 对表(磁盘)进行update, 和delete这类操作时,原先被标记为删除,但是因为一致性读(consistent read)的关系, 需要保留这些行版本的信息. 但是在full purge 过程中, innodb存储引擎会判断当前事务中已被删除的行是否可以在表(磁盘)中删除,如果可以,则立刻删除.  innodb在执行full purge操作时,每次最多尝试回收20个undo page. 最后innodb存储引擎会判断缓冲池中脏页的比例,  如果超过70%, 则刷新100个脏页到磁盘, 如果脏页比例小于70%,则是刷新10%的脏页到磁盘.

   

      background loop :

      若当前没有用户活动或者数据库关闭(shutdown)时,就会切换到这个循环. background loop 会执行以下操作.

      1 .删除无用的 undo 页(总是)

      2. 合并20个插入缓冲页(总是)

      3. 跳回到主循环(总是)

      4. 不断刷新到100个脏页知道符合条件(可能, 跳转到flush loop 中完成)

    若flush loop 中也没有什么事情可以做了, innodb存储引擎会切换到suspend_loop. 将master_thread挂起, 等待事件发生. 

    若用在mysql中启用了innodb存储引擎,但没有创建innodb表, 则master thread总是处于挂起状态

 ------------------------------------------------------ 2015-02-10------------------------------------------------------

 

innodb 1.2.x 版本之前的 master thread

 

innodb 1.2.x 版本的 master thread

    

msyql master thread

标签:

原文地址:http://www.cnblogs.com/henglxm/p/4284504.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!