关于MYSQL 和INNODB的逻辑关系图。最好的理解是一点点动手做,观察,记录,思考。

每隔0.1秒就刷一次MYSQL文件的变化,并闪动标示出来,以观察SQL执行时,MYSQL的处理顺序。
watch -n 0.1 -d stat /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile1 /var/lib/mysql/ibdata1
我理解的执行顺序:(还缺插入缓冲的合并)很粗的框架理解,但折腾了许多天。
硬盘的数据文件mytable.ibd存有mytable这个表id=1的记录,name=123的。(innodb_per_file设置为on)
当UPDATE MYTABLE SET NAME=’ABC’ WHERE ID=1这个语句执行时,系统生成一个LSN是1
INNODB READ THREAD 将这条记录以及词典从硬盘中读到内存的数据页DATA PAGE中,并写到内存中一块UNDO BUFFER中。并对这条记录加锁(如果有索引就是行级锁,否则就是表锁)
INNODB WRITE THREAD将这条记录的UNDO日志写到UNDO表空间的回滚段中(默认是ibdata1文件中),
INNODB对数据页中的记录进行更新,变成脏页后,然后把LSN=1的这条日志,写进REDOLOG BUFFER;
到commit时,无论是显式还是隐式,根据innodb_flush_log_at_trx_commit指定的方式,刷新LSN到REDO LOG文件中,然后释放锁。这时PURGE THREAD就可以对UNDOLOG进行清理。PURGE是按事务号不按日志。
INNODB MASTER THREAD会择机把脏页刷写回数据文件mytable.ibd中。具体过程INNODB先把脏页的数据拷贝到内存池中一个DOUBLE WRITE BUFFER中,然后调用系统FSYNC()刷新系统缓存来确认真正写入了,然后再将脏页FLUSHD到对应的数据文件中mytable.idb后,释放脏页。
INNODB MASTER THREAD会择机已经写回数据文件的日志LSN,做为CHECKPOINT写进REDOLOG中。
更直观性mysql整体逻辑机构图:
mysql sql执行过程示意图,对理解mysql执行计划有很大帮助
当 ‘innodb_flush_log_at_trx_commit = x ’x=0,1,2 各值时刷盘机制
mysql 内存分配示意图,对理解内存分配很有参考意义
INNODB 内存与硬盘之间交互。

watch -n 0.1 -d stat /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile1 /var/lib/mysql/ibdata1
关于MYSQL 和INNODB的逻辑关系图。最好的理解是一点点动手做,观察,记录,思考。的更多相关文章
- Mysql 逻辑架构图及日志系统
我们经常能看到如下的逻辑架构图,但是往往不能进行很好的记忆,看过就忘记了,也不知道它的实现方式.今天通过简单的画图来简单了解一下mysql到底是如何执行一个select语句,如何update一条语句. ...
- 使用MySQL Workbench导出MySQL数据库关系图
1. 点击MySQL Workbench中间Data Modeling下的Create EER Model From Existing Database: 2. 在Stored Connection中 ...
- 用mysql workbench导出mysql数据库关系图
用mysql workbench导出mysql数据库关系图 1. 打开mysql workbench,选择首页中间"Data Modeling"下方的第二栏"Create ...
- mysql innodb 的 逻辑存储结构
如上图: innodb 的 逻辑存储单元分成 表空间,段,区,页 4个等级 默认情况下,一个数据库 所有变共享一个 默认的表空间(tablespan).可以指定每个表一个表空间. 一个表空间管理着 多 ...
- MySQL的InnoDB索引原理详解
摘要 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节. InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档).本着高效学习的目的,本篇 ...
- MySQL的InnoDB索引原理详解 (转)
摘要: 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节. InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档).本着高效学习的目的,本 ...
- 重新学习MySQL数据库2:『浅入浅出』MySQL 和 InnoDB
重新学习Mysql数据库2:『浅入浅出』MySQL 和 InnoDB 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL.P ...
- 『浅入浅出』MySQL 和 InnoDB
作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL.PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系 ...
- MySQL 和 InnoDB
发现一篇总结的很不错的文章,转一下 (原文作者:Draveness 原文链接:https://draveness.me/mysql-innodb) 作为一名开发人员,在日常的工作中会难以避免地接触 ...
随机推荐
- [Ubuntu ] Vim Error E492 - Not an editor command: PluginInstall
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/plugin/Vundle.vim https://stackoverflow.co ...
- [Qt] 去掉QMessageBox标题栏上的图标
msgBox.setWindowFlags(Qt::Drawer);
- Vue-cli3.0下的雪碧图插件webpack-spritesmith配置方法
在前端项目中,为了减少对图片的请求次数,一般而言需要进行雪碧图的配置.即将多张小图标合并成一张图片,这样页面中的小图标都在一张图片上,只需请求一张图片,就可以通过CSS设置各个小图标的显示,利于节省带 ...
- qemu-img 整理
qemu-img命令语法: qemu-img command [command options] check命令: check [-f fmt < qcow2 | qed | vdi >] ...
- 《Java 开发从入门到精通》—— 2.3 使用IDE工具序
本节书摘来异步社区<Java 开发从入门到精通>一书中的第2章,第2.3节,作者: 扶松柏 , 陈小玉,更多章节内容可以访问云栖社区"异步社区"公众号查看. 2.3 使 ...
- 你所不知道的Python | 字符串连接的秘密
字符串连接,就是将2个或以上的字符串合并成一个,看上去连接字符串是一个非常基础的小问题,但是在Python中,我们可以用多种方式实现字符串的连接,稍有不慎就有可能因为选择不当而给程序带来性能损失. 方 ...
- ip地址与运算 ipcalc命令
http://man.linuxde.net/ipcalc 转载于:https://blog.51cto.com/sonlich/2064133
- C++条件分支结构
一.对于近期学习知识点的摘要: 1. 从第一个.cpp文件谈起, #include<iostream> //头文件 using namespace std; //使用命名空间,namesp ...
- Nmon 的安装及使用
一.安装 Nmon 1.下载地址:http://nmon.sourceforge.net/pmwiki.php?n=Site.Download 2.下载对应系统的 nomn 工具(我用 centos6 ...
- python(类多态)
一.多态 (以封装和继承为前提)不同的子类调用相同的方法,产生不同的结果 class Dog(): def __init__(self,name): self.name = name def game ...