一共48讲,学习时间2天。

开篇词 (1讲)

理论指导实践:先系统性的学习原理,再实践验证。
你可以从点到线再到面,形成自己到mysql知识网络。
在使用mysql时心里有底,知道怎么选择并且明白为什么。
了解原理,才能在实践中不断创新,提升个人到价值和工作输出。
 
 
 
 

基础篇 (8讲)

不要使用缓存,query_cache_type设置成DEMAND,这样默认不使用查询缓存。
要使用查询缓存的语句,用SQL_CACHE显示指定:select SQL_CACHE * from T where id = 10;
MYSQL8.0开始删除了查询缓存功能。
慢查询日志中的rows_examined字段,表示这个语句执行过程中扫描了多少行
 
1.⾸先客户端通过tcp/ip发送⼀条sql语句到server层的SQL interface 2.SQL interface接到该请求后,先对该条语句进⾏解析,验证权限是否匹配 3.验证通过以后,分析器会对该语句分析,是否语法有错误等 4.接下来是优化器器⽣成相应的执⾏计划,选择最优的执⾏计划 5.之后会是执⾏器根据执⾏计划执⾏这条语句。在这⼀步会去open table,如果该table上有MDL,则等待。 如果没有,则加在该表上加短暂的MDL(S) (如果opend_table太⼤,表明open_table_cache太⼩。需要不停的去打开frm⽂件) 6.进⼊到引擎层,⾸先会去innodb_buffer_pool⾥的data dictionary(元数据信息)得到表信息 7.通过元数据信息,去lock info⾥查出是否会有相关的锁信息,并把这条update语句需要的 锁信息写⼊到lock info⾥(锁这⾥还有待补充) 8.然后涉及到的⽼数据通过快照的⽅式存储到innodb_buffer_pool⾥的undo page⾥,并且记录undo log修改的redo (如果data page⾥有就直接载⼊到undo page⾥,如果没有,则需要去磁盘⾥取出相应page的数据,载⼊到undo page⾥) 9.在innodb_buffer_pool的data page做update操作。并把操作的物理数据⻚修改记录到redo log buffer⾥ 由于update这个事务会涉及到多个⻚⾯的修改,所以redo log buffer⾥会记录多条⻚⾯的修改信息。 因为group commit的原因,这次事务所产⽣的redo log buffer可能会跟随其它事务⼀同flush并且sync到磁盘上 10.同时修改的信息,会按照event的格式,记录到binlog_cache中。(这⾥注意binlog_cache_size是transaction级别 的,不是session级别的参数, ⼀旦commit之后,dump线程会从binlog_cache⾥把event主动发送给slave的I/O线程) 11.之后把这条sql,需要在⼆级索引上做的修改,写⼊到change buffer page,等到下次有其他sql需要读取该⼆级索 引时,再去与⼆级索引做merge (随机I/O变为顺序I/O,但是由于现在的磁盘都是SSD,所以对于寻址来说,随机I/O和顺序I/O差距不⼤) 12.此时update语句已经完成,需要commit或者rollback。这⾥讨论commit的情况,并且双1 13.commit操作,由于存储引擎层与server层之间采⽤的是内部XA(保证两个事务的⼀致性,这⾥主要保证redo log 和binlog的原⼦性), 所以提交分为prepare阶段与commit阶段 14.prepare阶段,将事务的xid写⼊,将binlog_cache⾥的进⾏flush以及sync操作(⼤事务的话这步⾮常耗时) 15.commit阶段,由于之前该事务产⽣的redo log已经sync到磁盘了。所以这步只是在redo log⾥标记commit 16.当binlog和redo log都已经落盘以后,如果触发了刷新脏⻚的操作,先把该脏⻚复制到doublewrite buffer⾥, 把doublewrite buffer⾥的刷新到共享表空间,然后才是通过page cleaner线程把脏⻚写⼊到磁盘中 ⽼师,你看我的步骤中有什么问题嘛?我感觉第6步那⾥有点问题,因为第5步已经去open table了,第6步还有没有 必要去buffer⾥查找元数据呢?这元数据是表示的系统的元数据嘛,还是所有表的?
 
 
 

实践篇 (37讲)

 

看过的人还看了

mysql45讲的更多相关文章

  1. 深入浅出索引--Mysql45讲笔记记录 打卡day3

    看了极客时间的mysql45讲记录一下自己理解的关于索引部分 为什么会有索引呢? 答:索引就像书的目录一样,可以让你快速知道你要看的部分在多少页.换句话说,索引就是为了提高数据库的查询效率. 索引的数 ...

  2. 一条SQL语句是如何执行的?--Mysql45讲笔记记录 打卡day1

    写在前面的话:回想以前上班的时候,空闲时间还是挺多的,但是都荒废了.如今找工作着实费劲了.但是这段时间在极客时间买了mysql45讲,就好像发现了新大陆一样,这是我认真做笔记的第一天,说实话第一讲我已 ...

  3. 日志系统:一条sql更新语句是如何执行的?--Mysql45讲笔记记录 打卡day2

    下面是一个表的创建语句,这个表有一个主键id和一个整型字段c: create table t(id int primary key,c int); 如果要将 id = 2 这一行的值加 1,sql语句 ...

  4. MySQL45讲:一条update语句是怎样执行的

    首先创建一张表: create table T(ID int primary key,c int); 如果要更新ID=2这行+1:应该这样写 update T set c=c+1 where ID=2 ...

  5. MySQL45讲笔记-事务隔离级别,为什么你改了数据我看不见

    简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败.在MySQL中,事务至此是在引擎层实现的,但并不是所有的MySQL引擎都支持事务,这也是MyISAM被InnoDB取代的原因之一. ...

  6. 深入学习MySQL 01 一条查询语句的执行过程

    在学习SpringCloud的同时,也在深入学习MySq中,听着<mysql45讲>,看着<高性能MySQL>,本系列文章是本人学习过程的总结,水平有限,仅供参考,若有不对之处 ...

  7. MySQL学习(八)删除表数据

    表空洞的产生 删除某个行数据 或删除某个页     如下图所示,这个删除过程只是标记了某行的位置为删除,假如此时在300与600之间插入了一行数据,那么 同理,当删除某个页时,该页就会被复用.所以当删 ...

  8. MySQL学习(六)change-buffer

    文章部分总结描述来自参考文章,属于半原创. 概述     文章将会介绍 change buffer 相关的知识点 查看 MySQL InnoDB 状态的命令 SHOW ENGINE INNODB ST ...

  9. MySQL--事务,隔离性和隔离级别

    事务 事务就是一组数据库操作,要么全部执行成功,要么全部执行失败,在MySQL中,事务是依靠存储引擎层实现的. ACID(Atomicity,Consistency,Isolation,Durabil ...

随机推荐

  1. centos7下面改变亮度

    通过改自己的配置文件来改变亮度的方法在我的机器上面是不中用了,我的是台式机,我用的集成显卡,目前我找到的还勉强的方法就是通过安装redshift来改变屏幕的亮度,我就是不喜欢太亮,差点瞎了. 具体是这 ...

  2. 包与类的命名 - service tool util 区别

    包与类的命名和定位时,service tool util 常常搞混淆,在此分析一下它们的定位: 名称 特点与定位 独立性 方法和类的属性 util 通用的.与业务无关的,可以独立出来,可供其他项目使用 ...

  3. 预处理、const、static与sizeof-static全局变量与普通的全局变量有什么区别

    1:全局变量的说明之前再加上static就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式.这两者在存储方式上并无不同.这两者的区别在于,非静态全局变量的作用域是整 ...

  4. docker部署多个mysql容器,并使用java连接

    测试springboot多个数据源配置时,需要安装多个mysql容器,由于资源限制,当前只有一台虚拟机,如果在一台机器上安装多个mysql实例,是可以的,但步骤比较繁琐,使用docker来安装MySQ ...

  5. 深度学习变革视觉计算总结(CCF-GAIR)

    孙剑博士分享的是<深度学习变革视觉计算>,分别从视觉智能.计算机摄影学和AI计算三个方面去介绍. 他首先回顾了深度学习发展历史,深度学习发展到今天并不容易,过程中遇到了两个主要障碍: 第一 ...

  6. 【SQL】 java.sql.SQLException: You can't specify target table 'emp' for update in FROM clause

    在执行sql: delete from emp where id in (select id from emp where cdate<'2018-02-02') 时报出以下异常: ### Th ...

  7. pytorch-LeNet网络

    LeNet网络的结构 输入的32x32x1的单通道图片, 第一层网络: 3x3x1x6的卷积层,步长为1, padding = 1, 经过2x2的池化操作 第二层网络: 5x5x6x16的卷积层, 步 ...

  8. matlab处理矩阵

    1.提取大矩阵的一列.一行元素:一列元素:  A(:,j)表示提取A矩阵的第j列全部元素一行元素:  A(i,:)表示提取A矩阵的第i行元素,于是我们有,A(i, j)表示提取A矩阵的第i行第j列的元 ...

  9. Eclipse中给SVN添加项目

    SVN添加项目, 1.在svn资源库中的目标路径上右键,新建一个远程文件夹,文件夹名称和项目名称一致即可. 2,在新建的远程目录上右键,选导入,导入我们要放到svn的本地项目. 3.导入时选中项目的名 ...

  10. View的介绍和运用 && FlexBox布局

    开始我们今天的项目学习啦~~~~~~ 1> 第一步当然是创建项目啦: 进入终端: 创建ViewDemo项目 命令如下啦,你看懂了对吧...嘻嘻!!! 2>View的介绍和运用 项目安装创建 ...