MMySQL(九):MVCC能否解决幻读问题

幻读【前后多次读取,数据总量不一致】

同一个事务里面连续执行两次同样的sql语句,可能导致不同结果的问题,第二次sql语句可能会返回之前不存在的行。

事务A执行多次读取操作过程中,由于在事务提交之前,事务B(insert/delete/update)写入了一些符合事务A的查询条件的记录,导致事务A在之后的查询结果与之前的结果不一致,这种情况称之为幻读

阅读更多

MySQL(八):读懂MVCC多版本并发控制

mysql在并发的情况下,会引起脏读,幻读,不可重复读等一系列的问题,为解决这些问题,引入了mvcc的机制。本文就详细看看mvcc是怎么解决脏读,幻读等问题的。

1、 数据库事务

1.1 事务

事务是操作数据库的最小单元,将【多个任务作为单个逻辑工作单元】执行的一系列数据库操作,他们作为一个整体一起向数据库提交,要么都执行、要么都不执行。

阅读更多

MySQL(七):一文详解六大日志

日志一般分为逻辑日志与物理日志两类

  • 「逻辑日志」:即执行过的事务中的sql语句,执行的sql语句(增删改)「反向」的信息
  • 「物理日志」mysql 数据最终是保存在数据页中的,物理日志记录的就是数据页变更 。

mysql数据库中日志是重要组成部分,记录着数据库运行期间各种状态信息」。主要有6类:

  • 二进制日志
  • 重做日志
  • 撤销日志
  • 错误日志
  • 查询日志
  • 中继日志
阅读更多

MySQL六:InnoDB数据文件

一、数据文件的组成

innodb数据逻辑存储形式为表空间,而每一个独立表空间都会有一个.ibd数据文件,ibd文件从大到小组成:

一个ibd数据文件–>Segment(段)–>Extent(区)–>Page(页)–>Row(行)图片

  • 表空间(Tablesapce)

    表空间,用于存储多个ibd数据文件,用于存储表的记录和索引,一个文件包含多个段。

  • 段(Segment)

    段由数据段、索引段、回滚段组成,innodb存储引擎索引与数据共同存储,数据段即是B+树叶节点,索引段则存储非叶节点

  • 区(Extent)

    区则是由连续页组成,每个区的大小为1M,一个区中一共有64个连续的页

  • 页(Page)

    页是innodb存储引擎磁盘管理的最小单位,页的大小为16KB,即每次数据的读取与写入都是以页为单位

    包含很多种页类型,比如数据页,undo页,系统页,事务数据页,大的BLOB对象页

阅读更多

MySQL五:InnoDB线程模型

一、InnoDB线程模型的组成

在Innodb存储引擎中,后台线程的主要作用是「负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据」。此外它会将已经修改的数据文件刷新到磁盘文件中,保证在发生异常的情况下,Innodb能够恢复到正常的运行状态。

阅读更多

MySQL四:InnoDB的存储结构

「MySQL存储引擎最大的特点就是【插件化】,可以根据自己的需求使用不同的存储引擎,innodb存储引擎支持行级锁以及事务特性,也是多种场合使用较多的存储引擎。」

当官方的存储引擎不足以满足时,我们通过抽象的API接口实现自己的存储引擎。

抽象存储引擎API接口是通过抽象类handler来实现,handler类提供诸如打开/关闭table、扫表、查询Key数据、写记录、删除记录等基础操作方法。

每一个存储引擎通过继承handler类,实现以上提到的方法,在方法里面实现对底层存储引擎的读写接口的转调。

阅读更多

MySQL三:存储引擎

一、MySQL存储引擎概述

「数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据」。不同的存储引擎提供不同的存储机制、索引、锁等功能。许多数据库管理系统都支持多种不同的数据引擎。

在关系数据库中数据的存储是以表的形式存储的,所以「存储引擎也可以称为表类型(Table Type,即存储和操作此表的类型)」

阅读更多

MySQL二:SQL运行机制

MySQL用了很久,但是一直也是工作的使用,对于MySQL的知识点都比较零散碎片,一直也没有整体梳理过,趁着最近不忙,梳理一下相关的知识点。

一、 MySQL的起源

MySQL是一个开源的关系数据库管理系统。原开发者为瑞典的 MySQL AB公司,2008 年AB公司被Sun公司收购,并发布收购之后的首个版本 MySQL5.1。2010 年 Oracle 收购 Sun 公司,至此MySQL归入Oracle门下,之后发布了收购以后的首个版本 5.5 。

  • MySQL5.1 ,该版本引入分区、基于行复制以及plugin API 。
  • MySQL 5.5 ,改善集中在性能、扩展性、复制、分区以及对 windows 的支持。

图片

阅读更多

MySQL一:架构体系

我们一般都不会去操作数据库本身,「而是通过SQL语句调用MySQL,由MySQL处理并返回执行结果」。那么SQL语句是如何执行sql语句的呢?

Sql语句执行过程图解:

图片

阅读更多

最全最全的Nginx解读文章

Nginx 概述

Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。

阅读更多