zoukankan      html  css  js  c++  java
  • mysql 原理 ~ 线程与IO

    一 简介:今天来聊聊具体的线程和IO

    二 具体线程与作用

       1 master thread    mysql的主要工作触发线程

          1 redo and binlog日志
          2 合并插入缓冲。
          3 脏页的刷新
          4 undo页回收
          5 产生一个ckp点

       2 IO THREAD       处理AIO模式的回调部分

       具体说明 AIO模式, 就是后台处理逻辑,然后先返回状态给前台,等后台处理完成,会调用回调函数进行二次操作,也就是数据库做完异步刷新,再调用以下进程

         insert buffer thread->insert buffer merges插入缓冲线程 1个
         log thread -> asynchronous log flushes 日志线程 1个
         read thread -> read-ahead负责数据块的读取) 读线程 4个
         write thread -> flushing of dirty buffers(负责数据库的写入) 写线程 4个

       3  purge thread 最新版本默认4个

          1  undo段的回收 2 对delete标记数据进行清除

            1  可以通过 innodb_purge_thread 调节参数 加快对undo段的回收 默认是1,OLTP业务通常调节为4

      4  page clean thread

            1  脏页清理线程

               1  默认启用一个线程,5,7支持多线程刷脏

               2  默认参数 innodb_page_cleaners  默认是1;最大可以是64,也就是会有64个page cleaner线程

           3   判断参数本身是否合适

               Innodb_buffer_pool_wait_free  等待值

                如果值很大,则需要增加innodb_page_cleaners值,同时增加写线程(innodb_write_io_thread)

     

      三 名词解析

        1 IO操作三要素 read / write/ sync

        2 同步IO 在同步文件IO中,线程启动一个IO操作然后就立即进入等待状态,直到IO操作完成后才醒来继续执行  例如redo的刷新,负责线程 master thread

          异步IO   异步文件IO方式中,线程发送一个IO请求到内核,然后继续处理其他的事情,内核完成IO请求后,将会通知线程IO操作完成了。 如果IO请求需要大量时间执行的话,异步文件IO方式可以显著提高效率 (缩写 aio) 例如脏页的刷新,负责线程 io thread

         请记住

         1 master thread和 io thread是独立的,并非相互干涉

         2 mysql利用AIO的方式大大提高了处理效率,也是真正工作的,这里要牢记

         3 page_cleaner_thread  和 purge thread的出现目标是减轻mater thread的负担

      四 总结

       1   mater thread负责主要工作,purge thread 和page cleaner分别负责undo和脏页的相关工作,整体的后期处理由io_thread完成

           从分类角度上看 有部分同步IO工作 有部分异步IO工作 

      2 在起先的版本中 mysql通过源代码模拟AIO的工作,在最新的版本中.mysql已经依赖linux内核进行AIO操作,参数是innodb_use_native_aio(默认开启)  编译需要依赖 libaio。AIO的相关线程就是io thread部分,上面第二部分

            

  • 相关阅读:
    vue2.0阻止事件冒泡
    IconFont 图标制作和使用
    Gulp入门教程
    伪类实现特殊图形,一个span加三角形
    Vue渲染列表,在更新data属性后,列表未更新问题
    理解Array.prototype.slice.call(arguments)
    ;(function(){ //代码})(); 自执行函数开头为什么要加;或者!
    Hexo 搭建博客 本地运行 常见报错及解决办法
    说说JSON和JSONP,也许你会豁然开朗
    数组去重的常用方法
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/10595007.html
Copyright © 2011-2022 走看看