第一章 MySQL架构与历史

注意 : the most important character that MySQL have is storage engine architecture, which seperate the Query Processing and other Server Task and Data’s storage/extract.

一.Mysql逻辑架构

在这里插入图片描述

1.并发控制
1.1 读写锁

共享锁(shared lock,读锁),排它锁(exclusive lock, 写锁)
读锁是共享的,互相不阻塞。
写锁是排他的,一个写锁会阻塞其他的写锁和读锁。

1.2 锁粒度

try to lock the data what you want to update only, not all data, this way can increase the concurrency of shared resources.
but locking also consumes resources.so we need to find a balance between lock consumes and data’s security.

(1)表锁(table lock)

table lock is the strategy with least overhead.

(2)行级锁(row lock)

row lock is the strategy with most concurrency and most overhead.

2.事务
2.1 隔离级别

(1)READ UNCOMMITTED(未提交读)
事务中的修改,即使没有提交,对其他事务也是可见的。这被称为脏读。很少使用。
(2)READ COMMITTED(提交读)
一个事务提交之前,所做修改对其他事务不可见。
(3)REPEATABLE READ(可重复读)——MySQL的默认级别
解决了脏读的问题,保证了在同一个事务中多次读取同样记录的结果是一致的。但是无法解决幻读。指的是当某个事务在读取某个范围内的记录时,另一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行。
(4)SERIALIZABLE(串行化)
隔离级别最高。

2.2 死锁

两个或多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环。
多个事务试图以不同顺序锁定资源时,就可能产生死锁。

InnoDB处理死锁的方法:将持有最少行级排它锁的事务进行回滚。

2.3 事务日志

use transaction log, storage engine can update the memory copy of table only, and record to transaction log on disk,not persistent to disk every time.
transaction log can increase the efficiency of transaction.

3.多版本并发控制

MVCC的实现,是通过保存数据在某个时间点的快照来实现的。
InnoDB的MVCC,在每行记录后面保存两个隐藏的列。一个是行的创建事件,一个是行的过期时间(删除时间)。这里的时间指的是系统版本号。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。
保存这两个额外的版本号,使得大多数操作都可以不用加锁。

4.Mysql存储引擎
4.1 InnoDB

默认,设计用来处理大量的短期事务。
数据存储在表空间中,由一系列的数据文件组成。
通过间隙锁策略防止幻读的出现。
基于聚蔟索引。

4.2 MyISAM存储引擎

不支持事务和行级锁。
将表存储在两个文件中:数据文件和索引文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值