1.InnoDB的特点 :(1)Fully ACID (InnoDB默认的Repeat Read隔离级别支持);(2)Row-level Locking(支持行锁);(3)Multi-version concurrency control (MVCC 支持多版本控制);(4)Foreign key support (支持外键);(5)Automatic deadlock detection(死锁自动检测);(6)High performance、High scalability、High availablility(高性能、高扩展、高可用)。

2.InnoDB的文件主要分为两个部分,一个是表空间文件,一个是重做日志文件。表空间文件包含独立表空间文件、全局表空间文件和Undo表空间文件。重做日志文件就是物理逻辑日志。

3.REDO LOG 是用来做数据库crash recovery的,是保证数据库数据正确性、完整性及持久性的重要机制之一。在数据库操作中,它保存了对InnoDB表中数据的修改记录,所以也叫日志文件。

4.日志文件内部也是按照大小相等的页面切割,页面大小为512个字节(回顾下数据页是多大? )。考虑到机械硬盘的块大小也是512字节,所以日志块也是如此设计。

解释:这是因为写日志其实就是为了提高数据库写入吞吐量,如果每次写入是磁盘块大小的倍数,效率才是最高的,并且日志将逻辑事务对数据库的分散随机写入转化成了顺序的512字节整倍数据的写入,这样就大大提高了数据库的效率。

5.物理事务(Mini-transaction ,MTR)是相对逻辑事务而言的。(逻辑事务具有ACID四个特性,用来保证数据库的完整性--要么都做,要么什么都不做。)物理事务是对InnoDB存储引擎而言的,在存储引擎中,只要涉及到文件修改、文件读取等物理操作,都离不开这个物理事务,可以说,物理事务是Buffer Pool中Page与文件中的一个桥梁。

6.InnoDB的REDO日志不完全是物理日志,它包含了部分逻辑意义。比如,插入一条记录时,MTR记录的是在一个页面中写入这条记录,内容大致包括页面号、文件号(表空间号)、以及这条记录的值(包括每个列信息),这样就有了逻辑概念。

7.一个逻辑事务由多个物理事务组成,用来保证数据库的ACID特性。物理事务可以保证一次物理修改是完整的,即可以理解为一个底层的相对完整的操作。比如,在插入一条记录的过程中,会包括写一条回滚记录及插入时写入一个页面等,那么这些逻辑上是一个动作的物理写入,就可以被认为是一个独立的物理事务。

8.物理事务的作用过程:首先,在系统将一个页面载入Buffer Pool时,需要一个新开始(mtr_start)或者一个已将开始的物理事务,载入时需要指定页面的获取方式,比如是用来读取的还是用来修改的,根据获取方式上锁(写,则上X锁;读,上S锁),上锁前,还需进行检查,例如是否页面已被上锁,是否需要排队等待等 。然后,当上锁成功后,物理事务就会将这个页面的内存结构存储到memo动态数组中,然后这个物理事务就可以访问这个页面了。物理事务对页面的访问有两种操作,一种是读,另一种是写。读操作就是简单读取指定页面内偏移及长度的数据。写则是指定从某一偏移开始写入指定长度的数据。同时,如果这个物理事务是写日志的,此时还需要对刚才的写操作记下日志。最后,是物理事务的提交,主要是将这个物理事务产生的日志写入到InnoDB日志系统的日志缓冲区中,然后,等待时机(日志刷盘机制),将缓冲区中的日志数据刷到日志文件中。

9.日志缓冲区的存储只是一个暂时的中间状态,日志缓冲区的大小可以通过参数innodb_log_buffer_size来设置。

10.日志产生的作用,是将随机页面写入变成顺序日志的写入,从而用一个速度更快的写入来保证速度较慢的写入的完整性,已提高整体数据的性能。

11.REDO 日志恢复 主要过程:(1)从日志文件的固定位置找到最新的检查点信息;(2)从最新的检查点位置开始扫描日志文件,做数据库恢复。

12.InnoDB的REDO是在UNDO之前做的,是等到物理的数据库操作都完成之后,才能在物理数据一致的基础上去做一些逻辑的操作,即UNDO回滚操作。

-----主要部分内容参考梳理于网络知识,此仅为学习笔记,在此原创作者感谢!

MySQL 基础知识梳理学习(三)----InnoDB日志相关的几个要点的更多相关文章

  1. MySQL 基础知识梳理学习(五)----详解MySQL两次写的设计及实现

    一 . 两次写提出的背景或要解决的问题 两次写(InnoDB Double Write)是Innodb中很独特的一个功能点.因为Innodb中的日志是逻辑的,所谓逻辑就是比如插入一条记录时,它可能会在 ...

  2. MySQL 基础知识梳理学习(七)----sync_binlog

    一般在生产环境中,很少用MySQL单实例来支撑业务,大部分的MySQL应用都是采用搭建集群的方法.搭建MySQL集群,可以进行数据库层面的读写分离.负载均衡或数据备份.基于MySQL原生的Replic ...

  3. MySQL 基础知识梳理学习(四)----GTID

    在日常运维中,GTID带来的最方便的作用就是搭建和维护主从复制.GTID的主从模式代替了MySQL早期版本中利用二进制日志文件的名称和日志位置的做法,使用GTID使操作和维护都变得更加简洁和可高. 1 ...

  4. MySQL 基础知识梳理学习(二)----记录在页面层级的组织管理

    1.InnoDB的数据存储结构 InnoDB中数据是通过段.簇.页面构成的. (1)段是表空间文件中的主要组织结构,它是一个逻辑概念,用来管理物理文件,是构成索引.表.回滚段的基本元素.创建一个索引( ...

  5. MySQL 基础知识梳理学习(六)----锁

    1.什么是锁: 对共享资源进行并发访问控制,提供数据的完整性和一致性. 2.锁的区别: 类型 lock latch 对象 事务 线程 保护 数据库内容 内存数据结构 持续时间 整个事务过程 临界资源 ...

  6. MySQL 基础知识梳理学习(五)----半同步复制

    1.半同步复制的特征 (1)从库会在连接到主库时告诉主库,它是不是配置了半同步. (2)如果半同步复制在主库端是开启了的,并且至少有一个半同步复制的从节点,那么此时主库的事务线程在提交时会被阻塞并等待 ...

  7. MySQL 基础知识梳理学习(一)----系统数据库

    information_schema 此数据库是MySQL数据库自带的,主要存储数据库的元数据,保存了关于MySQL服务器维护的所有其他数据库的信息,如数据库名.数据库表.表列的数据类型及访问权限等. ...

  8. MySQL 基础知识梳理

    MySQL 的安装方式有多种,但是对于不同场景,会有最适合该场景的 MySQL 安装方式,下面就介绍一下 MySQL 常见的安装方法,包括 rpm 安装,yum 安装,通用二进制安装以及源码编译安装, ...

  9. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

随机推荐

  1. [Swift]LeetCode1003. 检查替换后的词是否有效 | Check If Word Is Valid After Substitutions

    We are given that the string "abc" is valid. From any valid string V, we may split V into ...

  2. [Abp 源码分析]十、异常处理

    0.简介 Abp 框架本身针对内部抛出异常进行了统一拦截,并且针对不同的异常也会采取不同的处理策略.在 Abp 当中主要提供了以下几种异常类型: 异常类型 描述 AbpException Abp 框架 ...

  3. 让 CDN 更省流量的 Brotli 算法详解

    早年,我还是学生的时候,时常会鼓捣自己的个人网站,其中最困扰我的问题就是源站服务器易崩溃.作为学生,一方面我没有足够的钱购买高质量的服务器,另一方面一年的流量费用算下来也挺贵的,要花掉我不少的生活费. ...

  4. 【JVM虚拟机】(2)---GC 算法与种类

    GC 算法与种类 对于垃圾收集(GC), 我们需要考虑三件事情:哪些内存需要回收?如何判断是垃圾对象?垃圾回收算法有哪些? 一.GC的工作区域 1.不是GC的工作区域 (1)程序计数器.虚拟机栈和本地 ...

  5. qt 标签 QTextBrowser QLabel

    使用标签控件时我首先想到的就是QLabel,QLabel支持自动换行,并可以解析富文本,是一个不错的选择,这也使的我并没有去深入了解其他的可以有 同样效果的控件,本篇文字我也主要是讲解标签的用法,可以 ...

  6. Android Native App自动化测试实战讲解(下)(基于python)

    6.Appuim自动化测试框架API讲解与案例实践(三) 如图1,可以在主函数里通过TestSuite来指定执行某一个测试用例: 6.1,scroll():如图2 从图3中可以看到当前页面的所有元素r ...

  7. 模拟实现 DBUtils 工具 , 技术原理浅析

    申明:本文采用自己 C3P0 连接池工具进行测试 自定义的 JDBCUtils 可以获取 Connection: package com.test.utils; import java.sql.Con ...

  8. Android Nine-patch(.9.png)小结

    最近在项目开发过程中,因为界面布局美化的需要开始接触到.9.png,无论是Goolge官方文档还是网上其他资料, 都给出了很多关于.9.png的基本介绍,.9.png基础文章推荐以下几篇: Googl ...

  9. [四] java虚拟机JVM编译器编译代码简介 字节码指令实例 代码到底编译成了什么形式

      前言简介   前文已经对虚拟机进行过了简单的介绍,并且也对class文件结构,以及字节码指令进行了详尽的说明 想要了解JVM的运行机制,以及如何优化你的代码,你还需要了解一下,java编译器到底是 ...

  10. 别的C#基础笔记

    1.方法名称             *  规范:每一个单词的首字母大写 2.方法的返回值 *  void:没有返回值.不能使用return来返回具体的值 ,但是可以使用return终止当前方法    ...