高性能MySql阅读笔记-第一章

1.Mysql的逻辑架构


解释:

①第一层客户端:这个不是Mysql特有,譬如Navicat等客户端工具。

②第二层Mysql核心服务功能:譬如查询解析,优化,缓存处理,以及内置函数,存储过程,视图,触发器等操作。

③第三层存储引擎:存储引擎层负责数据的存储和提取。

2.Mysql并发控制

读写锁

并发控制方式多是采用锁机制。通常是共享锁(读锁)和排他锁(写锁)。多个客户在同一个时刻可以同时读取同一个资源,互不干扰。写锁是排他的,也就是说在写的同时不允许其他的写锁来写和读锁来读。这样就能防止脏数据的进入。

锁粒度

提高资源的并发性关键在于锁粒度。在给定的资源上,锁定的数据量越少,则系统的并发程度越高,只要相互不冲突即可。但是一味的细化锁,让锁的数量上升也会增加系统对资源的消耗。所以真正的锁策略是在锁的开销和数据的安全性之间寻求一种平衡。

表锁:

表锁是Mysql中开销最小的锁。它的策略是会锁定一张表,如果用户对表写入(插入,更新,删除),就会将表锁住,同时阻塞其他的用户对这张表的读和写。在某些场景下,写锁比读锁更高的优先级。写锁请求会插入到读锁队列的前面。

行锁:

行锁是最大程度支持并发处理(锁开销最大)。像默认的存储引擎InnoDB等实现了行锁。行锁只在存储引擎层实现。

3.Mysql事务

①事务的特性ACID

原子性(atomicity)

一个事务必须被视为一个不可分割的最小工作单元。

一致性(consistency)

数据库总是从一个一致性状态转换到另一个一致性状态。

隔离性(isolation)

一个事务所做的修改在最终提交以前,对其他事务是不可见的。可重复读(REPEATABLE READ)是Mysql的默认事务隔离级别。

持久性(durabilty)

一旦事务提交,则其所做的修改就会永久保存到数据库中。

②死锁

死锁是指两个或者多个事务之间再同一个资源上的相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。InnoDB存储引擎处理死锁的方法是将持有最少行级排他锁的事务进行回滚。

③Mysql中的事务

Mysql默认采用自动提交模式,如果不是显式地开始一个事务,则每个查询都被当作一个事务执行提交操作。


设置自动提交:SET AUTOCOMMIT=1;

设置Mysql事务隔离级别:SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

4.多版本并发控制MVCC

MVCC的出现是为了提高并发性能。策略就是读操作是非阻塞的,写操作只是在需要的行上面阻塞。MVCC的实现就是通过保存数据在某个时间点的快照来实现的。不同存储引擎对于MVCC的实现是不同的。典型的有乐观锁和悲观锁。

存储引擎InnoDB的MVCC

InnoDB的MVCC采用系统版本号(此处是两个版本号,一个是删除版本号,一个是创建版本号),每开始一个新事务,系统版本号都会自动递增。而当前的快照版本号会和当前的版本号进行比较来操作。

查询:

a. InnoDB只查找版本号早于当前事务版本的数据行(行的版本号小于等于事务的系统版本号)。这样就会避免出现脏读。

b. 行的删除版本号要么未定义,要么大于当前事务版本号(保证事务读取的行,在读之前未被删除),这样就不会出现脏读。

插入:

InnoDB为新插入的每一行保存当前系统版本号作为行版本号。

删除:

InnoDB为删除的每一行保存当前系统版本号作为删除标识。

更新:

InnoDB为插入一行新纪录,保存当前系统版本号作为行版本号,同时保存当前系统版本号到原来的行作为行删除标识符。

5.Mysql存储引擎

在文件系统中,Mysql将每个数据库保存为数据目录下的一个子目录。创建表时,Mysql会在数据库子目录下创建一个和表同名的.frm文件中保存该表的定义。Mysql的大小写敏感性和具体的平台有关。windows上是不敏感的,而linux上是敏感的。

查询表本身的信息:


InnoDB存储引擎:

InnoDB是Mysql的默认事务型引擎。InnoDB采用MVCC高并发,并且实现了四个标准的隔离级别。其默认级别是REPEATABLE READ(可重复读),并且通过间隙锁策略防止出现幻读。InnoDB表是基于聚簇索引建立的。聚簇索引对主键查询有很高的性能。不过它的二级索引中必须包含主键列。所以如果主键列很大,其他的所有索引都会很大。

MyISAM存储引擎:

在Mysql5.1及之前的版本,MyISAM是默认的存储引擎。MyISAM不支持事务和行级锁。再有就是崩溃后无法安全恢复。

MyISAM的加锁与并发:MyISAM对整张表加锁,而不是行级别。读取时会对需要读到的所有表加共享锁,写入时对表加排他锁。在表读的时候也可以插入,使用了Mysql的并发控制。






  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值