Mysql 实列结构-进程
一、MySQL后台进程简介
master thread与四大I/O线程:read thread、write thread、redo log thread、change buffer thread与
page cleaner thread、purge thread、checkpoint、error monitor thread、lock monitor thread。
二、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
各种循环执行的次数,据此判断系统负载高低
1、主循环loop包含两个操作
1s操作
1)日志缓冲刷新到磁盘,即使这个事务没有提交
2)刷新脏页到磁盘
3)执行和并插入缓冲的操作
4)产生checkpoint
5)清除无用的table cache
6)如果当前没有用户活动,就可能切换到background loop
10s操作
1)日志缓冲刷新到磁盘,即使事务还没有提交
2)执行和并插入缓冲的操作
3)刷新脏页到磁盘
4)删除无用的undo页
5)产生checkpoint
三、log buffer thread
log buffer thread负责把日志缓冲中的内容刷新到redo log文件中。
四、change buffer thread
change buffer thread负责把插入缓冲(change buffer)中的内容刷新到磁盘。
五、read/write thread
read/write thread是数据库的读写线程,默认值都是4个。
如果使用高转速的磁盘,可以适当调大该值。
1、读操作:innodb_read_io_threads,读线程 默认四个,负责数据块的读入
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| innodb_read_io_threads | 4 |
+------------------------+-------+
1 row in set (0.01 sec)
+-------------------------+-------+
| Variable_name | Value |
+-------------------------+-------+
| innodb_write_io_threads | 4 |
+-------------------------+-------+
1 row in set (0.01 sec)
六、page cleaner thread
page cleaner thread是负责脏页刷新的线程。
MySQL5.7之后可以增加多个。
七、purge thread
purge thread负责删除无用的undo页。由于进行DML语句的操作都会生成undo,系统需要定期
对undo页进行清理,这是需要purge操作。
MySQL5.6开始,把purge thread专门从master thread中分离出来,通过innodb_purge_thread参数
来控制purge的线程个数。默认为1个,最大可以调整为32个。
作用: 真正的删除记录和删除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
八、checkpoint线程
checkpoint线程的作用是在redo log发生切换时,执行checkpoint。redo log发生切换或者文件快写
满时,会触发把脏页刷新到磁盘。还有就是确保redo log刷新到磁盘,实现真正的持久化,避免数据丢失。
九、error monitor thread
error monitor thread时负责数据库报错的监控线程
十、lock monitor thread
lock monitor thread是负责锁的监控线程
Mysql 实列结构-进程的更多相关文章
- docker中启动2个mysql实列
一.mac环境安装docker容器 在docker官网中下载docker容器,地址:https://www.docker.com/products/docker-desktop 具体安装教程及设置网络 ...
- Mysql实训任务书
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6635189537079296526/ 什么是数据库:数据库(Database)是按照数据结构来组织.存储和管理数据 ...
- mysql 复制表结构、表数据的方法
From: http://blog.163.com/yaoyingying681@126/blog/static/109463675201191173221759/ MySQL 添加列,修改列,删除列 ...
- paip.解决 数据库mysql增加列 字段很慢添加字段很慢
paip.解决 数据库mysql增加列 字段很慢添加字段很慢 #环境如下: mysql5.6 数据仅仅3w alter table xxx add column yyy int default ...
- mysql 的 存储结构(储存引擎)
1 MyISAM:这种引擎是mysql最早提供的.这种引擎又可以分为静态MyISAM.动态MyISAM 和压缩MyISAM三种: 静态MyISAM:如果数据表中的各数据列的长度都是预先固定好的, ...
- mysql多列索引和最左前缀
数据库的索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度.索引优化是数据库优化的最重要手段. 如果查询语句使用 ...
- 用户中心mysql数据库表结构的脚本
/* Navicat MySQL Data Transfer Source Server : rm-m5e3xn7k26i026e75o.mysql.rds.aliyuncs.com Source S ...
- mysql数据库表结构导出
mysql数据库表结构导出 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; 导出整个数据库结构和数据 mysqldump -h localh ...
- 在本地计算机无法启动MYSQL服务错误1067进程意外终止
在本地计算机无法启动MYSQL服务错误1067进程意外终止 这种情况一般是my.ini文件配置出错了, 你可以删除系统目录下的my.ini文件, 把下面的内容重新写入my.ini文件试试, 要适当地改 ...
随机推荐
- 关于datatables自适应以及自定义列宽度的总结
table-layout:fixed;可以自定义列的宽度 <div id="bizhi" style="width:100%;height: 85%;overflo ...
- windows下vue开发环境的搭建
一 介绍: vue.js是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库 ...
- qrcode render 二维码扫描读取
著名的 qrcode 是 zxing https://github.com/zxing/zxing 基于 java, java 真的是轮子多啊... zxing 的 javascript 版本是 ht ...
- mo系统常用语句
mo系统常用语句 一.总结 一句话总结: 1.语言:双语设置(繁体,英语)语句? {:chooseLanguage("確定要刪除么","Are you sure you ...
- English trip V1 - B 15. Giving Personal Information 提供个人信息 Teacher:Solo Key: Do/Does
In this lesson you will learn to answer simple questions about yourself. 本节课讲学到回答关于自己的一些简单问题 课上内容(L ...
- 利用phpqrcode二维码生成类库和imagecopymerge函数制拼接图片的经验
前期准备 引入phpqrcode类库(下载地址:https://sourceforge.net/projects/phpqrcode/) PHP开启GD扩展库支持 1.利用phpqrcode生成二维码 ...
- Wannafly挑战赛23B游戏
https://www.nowcoder.com/acm/contest/161/B 题意:两个人van游戏,n堆石子,每次只能取这堆石子数目的因子个数,没得取的人输,问第一个人的必胜策略有多少种 题 ...
- 数据库连接的WEB登录界面的实现
要实现此功能,需要电脑安装JAVA EE.SQL Server 2008和Tomcat等软件,并进行配置环境成功. 对这门课的希望和自己的目标: 希望:可以完全掌握老师所讲的内容. 目标:能够完整的做 ...
- UI基础二:下拉,F4,OP等
常用的搜索帮助有SE11的SH,域,值列表,组件等...下面介绍一下经常用的: 一:下拉 dropdown是最经常用的,也是最简单的一种. 不管是查询条件,还是结果清单,还是明细界面,下拉都是一样的 ...
- python零碎知识点
0.规范化 使用Ctrl+Alt+L可以将代码排列格式更加规范化 1.浮点数 1.23x109就是1.23e9或者12.3e8:0.000012可以写成1.2e-5 2.字符串 >>> ...