1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 关于高性能mysql的读书报告_《高性能MySQL》读书笔记:第一章[MySQL架构与历史]...

关于高性能mysql的读书报告_《高性能MySQL》读书笔记:第一章[MySQL架构与历史]...

时间:2019-08-14 09:07:39

相关推荐

关于高性能mysql的读书报告_《高性能MySQL》读书笔记:第一章[MySQL架构与历史]...

《高性能MySQL》读书笔记:第一章[MySQL架构与历史]

MySQL逻辑架构

MySQL最优秀的一点就是它的存储架构,将查询处理,系统任务,数据存储/提取相分离

并发控制

通过读写锁实现并发控制

读锁/共享锁:相互不阻塞,多个用户在同一时刻可以读取同一个资源

写锁/排他锁:一个写锁会阻塞其他读锁和写锁

锁粒度

锁粒度越小,并发程度越高,行锁粒度最小

MySQL在存储引擎层实现自己的锁策略和锁粒度,不同存储引擎自然不同锁策略和粒度

锁策略

表锁

机制描述:它会锁定整张表。一个用户在对表进行写操作(插入,删除,更新等)前,需要先获得写锁,这会阻塞其他用户对该表的所有读写操作。只有没有写锁时,其他读取的用户才能获得该锁,读锁之间是不互相阻塞的

写锁比读锁拥有更高的优先级,因此一个写锁请求可能会被插入到读锁队列前面,反之读锁不行

ALTER TABLE之类的语句会被MYSQL忽略存储引擎的锁机制

行锁

可以最大程度的支持并发处理。

只在存储引擎层实现

事务

ACID

原子性 atomicity

一致性 consistency :数据库总从一个一致性状态转移到另一个一致性状态。用户数据修改之后,系统发生崩溃也不会导致脏数据,因为事物没有提交

隔离性 isolation

持久性 durability

隔离级别

SQL标准中定义了4种隔离级别

较低的隔离级别通常可以执行更高的并发

READ UNCOMMITTED 未提交读

很少见

READ COMMITTED 提交读

大多数数据库系统的默认隔离级别(MySQL不是)

又叫不可重复读,两次执行同样的查询可能会读到不一样的结果

PEPEATABLE READ 可重复读

默认隔离级别

通过MVCC实现不可重复读

SERIALIZABLE 可串行化

最高隔离级别,强制事务串行执行

死锁

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

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

事务日志

数据的修改行为会先记录到事务日志中,事务日志是磁盘上一小块顺序IO,效率很高。

实物日志持久后,修改的数据可以在后台慢慢的写到磁盘上。

所以一次修改数据要写两次磁盘

MySQL中的事务

1.MySQL提供InnoDB和NDB Cluster两种支持事务的引擎

2.MySQL采用自动提交模式,每个查询自动的被当作一个事务执行提交操作

3.一些命令会强制提交活动事务:一般是修改大量数据的命令,如ALTER TABLE

4.InnoDB可以隐式或者显式的加锁

多版本并发控制

基于并发性能的考虑,事务的控制一般不采用加锁,而使用多版本并发。可以认为MVCC是行级锁的一个变种。

在每行记录后面保存两隐藏的列:创建的版本号 过期的版本号

规则

存储引擎

1..frm:存储表的定义

InnoDB

1.InnoDB通过间隙锁策略防止幻读的出现

2.InnoDB表是通过聚簇索引建立的

3.等等等等优点后面章节介绍

MyISAM

5.1及之前的版本,MyISAM是默认的存储引擎

不支持事务和行级锁

数据文件.MYD

索引文件.MYI

书中还介绍了好多其他引擎第三方引擎包括转换表的引擎相关,就不在此记录了先

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。