一 简介:今天来聊聊具体的线程和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部分,上面第二部分