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

二 具体线程与作用

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

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

2 IO THREAD

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 innodb_purge_threads

1  脏页清理线程 2 undo段的回收 3 对delete标记数据进行清除

三 涉及到的主要IO

线程部分

IO THREAD部分

目标部分

事务

1 dirty pages 2 log cache 3 insert buffer

查询

1 normal pages

参数部分

dirty page
    write_io_thread 写线程 (多核cpu能更好利用)
    innodb_io_capacity 一次刷新脏页的数量
    innodb_adaptive_flushing 是否临脏页刷新
   redo cache
   innodb_flush_log_at_trx_commit 刷新到磁盘的redo event事务数量
   binlog cache
   sync_log 刷新到磁盘的binlog event事务数量
  通用
  read_io_thread 读线程 (多核cpu能更好利用)
  innodb_flush_method

四 名词解析

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的方式大大提高了处理效率

五  flush_method 补充

1  O_DIRECT 数据文件的写入操作是直接从mysql innodb buffer到磁盘的,并不用通过操作系统的缓冲,而真正的完成也是在flush这步,日志还是要经过OS缓冲

2 fdatasync模式:写数据时,write这一步并不需要真正写到磁盘才算完成(可能写入到操作系统buffer中就会返回完成),真正完成是flush操作,buffer交给操作系统去flush,并且文件的元数据信息也都需要更新到磁盘。。

mysql 原理 ~ 线程与IO的更多相关文章

  1. Replication基础(六) 复制中的三个线程(IO/SQL/Dump)

    Reference:  https://blog.csdn.net/sun_ashe/article/details/82181811?utm_source=blogxgwz1 简介在MySQL复制技 ...

  2. MySQL Replication 线程(理解详细过程)

    Replication 线程 Mysql 的Replication 是一个异步的复制过程,从一个Mysql instace(我们称之为Master)复制到另一个Mysql instance(我们称之S ...

  3. MySQL Error Log 中IO写入瓶颈的警告分析

    周末在一台MySQL实例上频繁做大批量的写入测试,无意中发现MySQL的errorlog中频繁出现如下的Note:page_cleaner: 1000ms intended loop took *** ...

  4. MySQL服务器线程数的查看方法详解

    本文实例讲述了MySQL服务器线程数的查看方法.分享给大家供大家参考,具体如下: mysql重启命令: ? 1 /etc/init.d/mysql restart MySQL服务器的线程数需要在一个合 ...

  5. 查看MySQL的线程

    通过两张表查看MySQL的线程:information_schema.processlist 和 performance_schema.threads processlist是information_ ...

  6. Linux ulimit和动态修改MySQL最大线程数限制

    ulimit是限制进程对资源的使用但软件资源限制变化不大,特别是process/file,分别对应nproc和nofilenproc可用 ulimit -u 查询:nofile可用 ulimit -n ...

  7. mysql后台线程详解

    1.mysql后台线程 mysql后台线程主要用于维持服务器的正常运行和完成用户提交的任务,主要包括:master thread,read thread,write thread,redo log t ...

  8. mysql主从架构,IO、SQL线程运行为YES,从库没有同步数据

    mysql基于binlog主从复制架构,IO.SQL线程运行为YES,从库没有同步数据 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_D ...

  9. 备忘录--关于线程和IO知识

    因为自己还在出差中,没时间深入学习,最近工作里又有对一些技术的思考,所以这里记录下来,等回去有时间可以按照这个思路进行学习,这里主要起到备忘的作用. 1.线程难学难在我们没有理解操作系统里的线程设计机 ...

随机推荐

  1. 第五节,Neural Networks and Deep Learning 一书小节(中)

    在这一节,我们对上一个程序(Network1.py)进行了优化 3.改进神经网络的学习方法 (1)交叉熵代价函数的引入 Network1程序采用了S型神经元,S型神经元存在一个问题,当输出层神经元的输 ...

  2. hdu 2476"String painter"(区间DP)

    传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题意: 给定字符串A,B,每次操作可以将字符串A中区间[ i , j ]的字符变为ch, ...

  3. 老项目用webpack中文乱码问题解决记录

    有个很久(有多久呢,你还记得jquery1.6的年代吗...)的项目需要新加一些功能,又想使用新的生产力工具比如说webpack,es6,vue神马的.原来的项目整体都是用GBK编码的,这特么...坑 ...

  4. c#中内置委托

    一.Action泛型委托 和之前委托最大区别在于不用定义委托,直接实例化委托(申明就可以),泛型其实就是选择数据类型,进行使得程序更加安全,并且也实现了委托的重载,最多选择16个参数. namespa ...

  5. Vue(基础六)_vue-router

    一.前言 本文主要涉及: 1.传统方式路由的实现                                     2.使用vue-router                         ...

  6. STM32F4 ------ RTC

    如果只执行 HAL_RTC_GetTime(),读取完后时间不再跑 HAL_RTC_GetTime() 和 HAL_RTC_GetDate()

  7. 10款Mac上程序员装机必备的开发工具推荐和下载

    10款Mac上程序员装机必备的开发工具推荐和下载 使用Mac的用户主要有两大类:设计师和程序员,为各位程序员童鞋推荐10个Mac上非常棒的开发工具和辅助工具,分享软件专题[10款Mac上程序员装机必备 ...

  8. nginx跨域的简单应用

    nginx跨域的简单应用 要求:1.浏览器访问print.qianbaihe.wang/zt 直接调转至 www.flybirdprint.com/zt,浏览器显示域名不变. server { lis ...

  9. MySql笔记二:命令简介

    从笔记二开始讲解一些简单的命令,这些我在SQL Server里面都讲过了,什么主键,约束啥的数据库这些都是相通的,所以MySql这里,不讲,粗略过一遍. 使用命令框登录MySql mysql -u r ...

  10. ruby----controller中简单的增删改 方法定义

    class WorkProsController < ApplicationController before_action :set_work, only: [:show, :edit, :u ...