mysql aio与并发执行线程_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部分,上面第二部分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值