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部分,上面第二部分

        

原文地址:https://www.cnblogs.com/danhuangpai/p/10595007.html