MySQL架构及基础知识归纳

数据库的知识都比较零散,内容也比较多,筛选了一些比较重要且常见的知识点,做了归纳整理,方便后续回顾和学习。

01、MySQL服务器逻辑架构图

在这里插入图片描述

图1 MySQL服务器逻辑架构图

第一层:连接/线程处理。大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。比如连接处理、授权认证、安全等。

第二层:查询缓存、解析器、优化器。MySQL的核心功能,包括查询解析、分析、优化、缓存以及所有的内置函数(例如,日期、时间、数学和加密函数),所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。

第三层:存储引擎。存储引擎主要负责MySQL中数据的存储和提取。

02、读写锁

读锁(也叫做共享锁)是共享的,或者说是相互不阻塞的。多个客户在同一时刻可以同时读取同一个资源,而互不干扰。

写锁(也叫做排他锁)是排他的,也就是说一个写锁会阻塞其他的写锁和读锁,这是出于安全策略的考虑。

03、表锁和行级锁

表锁是MySQL中最基本的锁策略,并且开销最小的策略。它会锁定整张表。

行级锁可以最大程度地支持并发处理(同时也带来了最大的锁开销)。

04、事务

事务就是一组原子性的SQL查询,或者说是一个独立的工作单元。事务内的语句,要么全部执行成功,要么全部执行失败。

事务必须具备ACID特征。

1、原子性(atomicity):整个事务中的所有操作要么全部提交成功,要么全部失败回滚。

2、一致性(consistency):数据库总是从一个一致性的状态转换到另外一个一致性的状态。

3、隔离性(isolation):一个事务所做的修改在最终提交之前,对其他事务是不可见的。

4、持久性(durability):一旦事务提交,则其所做的修改就会永久保存在数据库中。

05、隔离级别

1、read uncommitted(未提交读):事务可以读取未提交的数据,也叫做脏读。

2、read committed(提交读):已经提交的事务所做的修改时可见的,未提交的事务所做的修改是不可见的。也叫做不可重复读。多次读取,数据内容不一致。

3、repeatable read(可重复读):保证在同一个事务中多次读取同样的记录结果是一致的。但是无法解决幻读。多次读取,数据总量不一致。

4、serializable(可串行化):强制事务串行执行。可以解决幻读的问题。

06、死锁

死锁是指两个或多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。

如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁进程。(来自《计算机操作系统》)

InnoDB目前处理死锁的方法是,将持有最少行级排他锁的事物进行回滚。

07、事务日志

事务日志采用追加的方式,因此写日志的操作是磁盘上一小块区域的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。

08、多版本并发控制

多版本并发控制(MVCC)的实现,是通过保存数据在某个时间点的快照来实现的。不管需要执行多长时间,每个事务看到的数据都是一致的。

InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保存行的过期时间(或删除时间)。当然存储的并不是实际的时间值,而是系统版本号。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号。

09、InnoDB存储引擎

1、InnoDB是MySQL的默认事务型引擎,也是最重要、使用最广泛的存储引擎。它被设计用来处理大量的短期事务,短期事务大部分情况是正常提交的,很少会回滚。

2、InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别。其默认的级别是repeatable read(可重复读),并且通过间隙锁策略防止幻读的出现。

3、InnoDB表是基于聚簇索引建立的。

4、InnoDB内部做了很多优化,包括从磁盘读取数据时采用的可预测性预读,能够自动在内存中创建hash索引以加速读操作的自适应哈希索引,以及能够加速插入操作的插入缓冲区。

5、InnoDB通过一些机制和工具支持真正的热备份,MySQL中的其他存储引擎不支持热备份。

10、MyISAM存储引擎

1、不支持事务。

2、不支持行级锁。

3、不支持MVCC。

4、不支持外键。

5、崩溃后无法安全恢复。

6、支持全文索引。

11、MyISAM压缩表

压缩表是不能进行修改的(除非先将表解压缩,修改数据,然后再次压缩)。压缩表可以极大地减少磁盘空间占用,因此也可以减少磁盘I/O,从而提升查询性能。压缩表也支持索引,DNA索引也是只读的。

12、一点历史

Oracle一开始收购了InnoDB,之后又收购了MySQL,在同一个屋檐下对于两者都是有利的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值