一共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. redis快照关闭了导致不能持久化的问题

    在使用redis的时候我们经常会遇到这种bug:   Python与Redis交互时,设置数据出现下列报错信息:   MISCONF Redis is configured to save RDB s ...

  2. 原生javascript封装动画库

    ****转载自自己发表于牛人部落专栏的文章**** 一.前言 本文记录了自己利用原生javascript构建自己的动画库的过程,在不断改进的过程中,实现以下动画效果: 针对同一个dom元素上相继发生的 ...

  3. JsonObject处理时间转换问题

    正常传时间的时候使用JsonObject转换的时候会把整个日期都转换成一个新的对象,而如何转换成传统的yyyy-MM-dd HH:mm:ss类型呢 常用的时间格式 private String for ...

  4. 第二届强网杯部分题writeup

    0x00 题目名称 签到 操作内容:   FLAG值: flag{welcome_to_qwb} 0x01 题目名称 Weclome 操作内容: 通过查看文件发现是一个bmp格式的图片文件,然后加上后 ...

  5. 在业务控制方法中写入User,Admin多个模型收集参数

    1)  可以在业务控制方法中书写1个模型来收集客户端的参数 2)  模型中的属性名必须和客户端参数名一一对应 3)  这里说的模型不是Model对象,Model是向视图中封装的数据 @Controll ...

  6. jQuery九类选择器

    目的:通过选择器,能定位web页面(HTML/JSP/XML)中的任何标签, 注意:项目中,通常是多种选择器一起使用 基本选择器 <html> <head> <meta ...

  7. VBA ListView控件使用实例

    功能:ListView控件实现连接数据库实现显示查询数据空能. 图片: 代码: Private Sub CommandButton1_Click() Dim res As String res = T ...

  8. PHP生成带logo图像二维码的两种方法

    本文主要和大家分享PHP生成带logo图像二维码的两种方法,主要以文字和代码的形式和大家分享,希望能帮助到大家. 一.利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用 ...

  9. iscsi序列二、iscsi多路径配置方式

    一.ISCSI多路径应用 如果存储服务器到交换机只有一条线路的时候,那么一条线路出线故障,整个就没法使用了,所以多线路可以解决这个问题,避免单点故障 如上图,如果SAN服务器与客户端交换机只有一条线路 ...

  10. Win10上的媒体断开连接错误消息(找不到ip地址)

    使用管理员权限打开命令提示符并执行以下命令: ipconfig /all 这将列出所有连接的媒体,即以太网和Wifi及其状态. 结果全部显示: 媒体断开连接 如下图: 如果是这种情况,我们需要解决互联 ...