1.IO THREAD

 MySQL有很多后台线程

其中包括了负责IO的相关线程IO THREAD

1. 参数innodb_write_io_threads  写线程 默认四个,负责数据块的写入

2. 参数innodb_read_io_threads 读线程  默认四个,负责数据块的读取

上面两个参数高并发下,可以设置为8.

2.Purge thread

 作用: 真正的删除记录和删除undo log

1.清理删除后的数据页的空间(因为之前的删除只是打上删除标签,并没有正真删除),

2.清理undo

举例:表tb1中有记录pk=1,2,3;

此时delete from tb1 where pk=1;

1. 将pk=1的记录标记为删除(delete-mark,infobits),数据库中pk=1的记录此时还是存在的,空间并没有被释放,该操作为同步操作(SQL执行完,也就标记完成了)。

2. purge ,该部分为后台线程(purge线程)异步操作,会真正的删除该记录,且空间被释放。purge线程是系统自动的,无法人工控制。

标记为已删除的原因:

1. 该事物可能需要回滚,先作保留。

2. 当事物1去删除pk=1且没有提交时, 事物2应该要能看到pk=1的记录(事物的隔离性)。

过滤条件是聚簇索引:

1. delete – 将该记录标记为 delete-mark 。

2. update – 将该记录 先物理delete (聚簇索引里主键相同的行最多只能有1个),然后 insert (或者可以原地更新[in place update])(即使删除了,也可以通过undo进行还原)。

过滤条件是二级索引:

1. delete – 将该记录标记为 delete-mark 。

2. update – 将该记录标记为 delete-mark (索引列是columns + pk,即使是唯一索引更新也是和原来的不一样),然后 insert 。

为什么没有insert”

1. insert操作是不需要异步去purge,因为insert的记录之前是不存在的;

2. 不存在记录(未提交)是没有别的事物能引用到的,所以insert以后,对应的undo可以直接删除,而不需要等待异步.

purge 总结:

1. delete-mark的记录最后会被purge线程回收,Purge会检测记录上是否有其他事物在引用undo,如果没有就可以删除。

2. innodb_purge_threads (5.6以后),可以设置的大一些,回收的速度会快一些。

innodb_purge_threads = 4

 3.Insert-buffer
thread

负责insert buffer与辅助索引的合并操作。

 4.redo-log
thread

负责重做日志缓冲的磁盘写入

 5.Master
thread(主线程)

后台进程Master
thread 里面有两种循环,再循环内可以调用其他线程进行相关的操作。

master
thread的线程优先级别最高。

其内部几个循环(loop)组成:主循环(loop),后台循环(background
loop),刷新循环(flush loop),暂停循环(suspend
loop)。

主循环有1s循环和10s循环. 1s循环即循环执行一次就sleep
1s后又执行一次又sleep 1 s.

srv_master_thread loops: 745
1_second, 744 sleeps, 60 10_second, 179 background, 179
flush

srv_master_thread log flush
and writes: 744

各种循环执行的次数,据此判断系统负载高低

常见mysql后台线程的更多相关文章

  1. mysql后台线程详解

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

  2. MySQL后台线程的清理工作

    后台清理工作:脏页刷盘.undo回收 1.page cleaner thread:刷新脏页 2.purge thread:清空undo页.清理“deleted”page 一.innodb_page_c ...

  3. MySQL后台线程整理总结

    本文整理自<MySQL技术内幕 InnoDB存储引擎> MySQL通过后台各种线程.内存池.文件交互来实现对外服务的,不同线程实现不同的资源操作,各个线程相互协助,共同来完成数据库的服务. ...

  4. MySQL学习笔记-数据库后台线程

    数据库后台线程 默认情况下讲述的InnoDB存储引擎,以后不再重复声明.后台线程有7个--4个IO thread,1个master thread,1个锁监控线程,1个错误监控线程.IO thread的 ...

  5. 【温故而知新-万花筒】C# 异步编程 逆变 协变 委托 事件 事件参数 迭代 线程、多线程、线程池、后台线程

    额基本脱离了2.0 3.5的时代了.在.net 4.0+ 时代.一切都是辣么简单! 参考文档: http://www.cnblogs.com/linzheng/archive/2012/04/11/2 ...

  6. InnoDB体系架构(一)后台线程

    InnoDB体系架构——后台线程 上一篇已经了解了MySQL数据库的体系结构 这一篇除了介绍InnoDB存储引擎的体系架构外,同时进一步了解InnoDB的后台线程. InnoDB存储引擎是多线程的模型 ...

  7. C#夯实基础之多线程二:主线程、前台线程与后台线程

    我们在<C#夯实基础之多线程一:初识多线程>一文中第二部分中指出,既然windows最终发展出了多线程模型,按理说,我们直接使用一个.NetFramework的线程类就可以直接撸代码了,但 ...

  8. 开源WinForms界面开发框架Management Studio 选项卡文档 插件 Office 2007蓝色风格 后台线程

    Management Studio是我在WinForms小项目开发过程中搭建起来的一个插件式结构的应用程序框架,因为简单灵活又容易扩展,现在将它开源供读者参考. 跑起来的效果图如下所示,具备选项卡式多 ...

  9. HandlerThread 创建一个异步的后台线程

    使用HandlerThread几大优点: 1.制作一个后台异步线程,需要的时候就可以丢一个任务给它,使用比较灵活; 2.Android系统提供的,使用简单方便,内部自己封装了Looper+Handle ...

随机推荐

  1. Django基础之Ajax

    知识预览 Ajax前戏:json Ajax简介 Jquery实现的ajax JS实现的ajax Ajax前戏:json 什么是json? 定义: JSON(JavaScript Object Nota ...

  2. 【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))

    问题情形 当应用在Azure 应用服务App Service中运行时,有时候出现CPU,Memory很高,但是没有明显的5XX错误和异常日志,有时就是有异常但是也不能明确的指出具体的代码错误.当面临这 ...

  3. React.Component 和 React.PureComponent 、React.memo 的区别

    一 结论 React.Component 是没有做任何渲染优化的,但凡调用this.setState 就会执行render的刷新操作. React.PureComponent 是继承自Componen ...

  4. 群晖DS218+做maven私服(nexus3)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. Java数据结构-00导论

    一个程序是怎样组成的呢?数据结构+算法=程序 一.什么是数据结构: 简单定义就是研究数据的存储方式:选择适当的数据结构可以提高计算机程序的运行效率(时间复杂度O)和存储效率(空间复杂度S). 二.数据 ...

  6. 如何给office2019安装visio2019

    1.关于版本,如果你的office2019推荐安装2019visio,2019office只有安装2019visio才不会互斥 下载地址是百度网盘传送,也要安装教程,可是里面的激活器用不了 https ...

  7. 利用python3监控服务器状态进行邮件报警

    在正式的生产环境中,我们常常会需要监控服务器的状态,以保证公司整个业务的正常运转,常常我们会用到像nagios.zabbix这类工具进行实时监控,那么用python我们怎么进行监控呢?这里我们利用了p ...

  8. 【实战】记一次老项目的swagger整合

    1.背景 这两天接到一个整合swagger的任务,本以为很简单,预计两小时内完成,没想到其中有太多的坑,整了两天才完成. 首先项目是一个比较老的项目,之前用的servlet,目前在重构为springm ...

  9. Jmeter 获取系统时间

    ${__time(yyyy-MM-dd HH:mm:ss:SSS,time)} :格式化生成时间格式 2020-11-03 21:59:13:658

  10. RabbitMQ相关概念的理解

    1.什么是消息? 消息就是程序(服务)之间传递的数据(图/文/声/像). 2.MQ是什么? MQ(MessageQueue)是指消息队列亦或消息总线.是消息的容器,这个容器的策略是FIFO(先进先出) ...