一共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. 7.RabbitMQ--消息确认机制(confirm)

    RabbitMQ--消息确认机制(confirm) Confirm模式 RabbitMQ为了解决生成者不知道消息是否真正到达broker这个问题,采用通过AMQP协议层面为我们提供了事务机制方案,但是 ...

  2. ARTS打卡计划第七周

    Algorithms: https://leetcode-cn.com/problems/longest-common-prefix/ Review: https://link.medium.com/ ...

  3. how to force git to overwritten local files

    最佳解决方法 重要提示:如果您有任何本地更改,将会丢失.无论是否有--hard选项,任何未被推送的本地提交都将丢失. 如果您有任何未被Git跟踪的文件(例如上传的用户内容),这些文件将不会受到影响. ...

  4. mongodb 的云数据库产品 atlas 的使用

    前言:最近发现 mlab 被mongodb 收购以后,不再支持新用户,推荐使用 MongoDB Atlas 第一步:注册或登陆 在MongoDB atlas首页,如果有账号,那就点击登陆.否则点击Ge ...

  5. ubuntu16.04下如何安装dtc工具?

    答: sudo apt-get install device-tree-compiler -y

  6. 【论文学习】Is the deconvolution layer the same as a convolutional layer

    结合上升采样upsample和卷积操作.Sub-piexl convolution. Efficient Sub-pixel-convolutional-layers. LR network,即低分辨 ...

  7. js-xlsx

    XLSX.read(data, {type: type}); type主要取值如下: base64: 以base64方式读取: binary: BinaryString格式(byte n is dat ...

  8. MySql锁和事务隔离级别

    在讲mysql事物隔离级别之前,我们先简单说说mysql的锁和事务. 一:数据库锁 因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对同一张表进行操作,比如有的在读取该行数据,其他的尝试去 ...

  9. UITableView+FDTemplateLayoutCell计算行高显示<二>

    之前记录过一篇UITableView+FDTemplateLayoutCell计算行高不成功的博客... 传送门:http://www.cnblogs.com/pengsi/p/6571311.htm ...

  10. ASP.NET Core 入门笔记5,ASP.NET Core MVC控制器入门

    摘抄自https://www.cnblogs.com/ken-io/p/aspnet-core-tutorial-mvc-controller-action.html 一.前言 1.本教程主要内容 A ...