高性能MySQL快速回忆第一章MySQL架构与历史

前言

前段时间看完了高性能mysql,兴致勃勃的去做高级数据库的作业,额发现题目都见过,但是不会做。我的重点 数据库老师的重点 = ,我也是个银才啊。
下面,不是重点的重点奉上。

1.mysql架构

额

2.应对并发

读写锁: read lock(share lock)、 write lock(exclusive lock)
锁粒度:锁整张表、锁某行数据
力度越小,并发度越高,但是加锁检查锁也会产生系统的开销
锁策略:在锁的开销和数据安全之间寻找平衡

3.事务

automicity、consistency、isolation、durability

4.隔离级别

较低级别的隔离通常可以执行更高的并发,系统开销也更低
READ UNCOMITIED(未提交读):
就是在你事务内的修改,即使你还没提交事务,别人也能看到你实时的修改,而且你事务内的修改没有一起提交,(可以理解成 没有事务也没有加锁)
READ COMITIED(提交读):
事务内的修改别人看不到,但是别人能看事务修改前的数据,就是两个事务可以同时操作一行 (可以理解成,加了事务,但是没加锁)(其他默认)
REPEATED READ(可重复读):
在上一步基础上加了锁,你不提交,别人不能看,但是可能出现幻读,因为加的锁是行级锁,如果事务a,需要两次count id<10,事务b在a两次count之间插入一条数据 id=-1,事务a两次count的结果就不一样了,可重复读的意思是 在一个事务内,可重复读某一行且能保证每次读的结果一样(因为加了行级锁)(InnoDB默认)
SERIALIZABLE(可串行化):
他能避免一切问题,他会对每一行数据加锁,。。所以有很多锁争用

5.死锁

产生条件:①数据冲突(错误的推进方式)②存储引擎的实现方式
解除死锁:①锁等待超时放弃请求②InnoDB将持有最少行级排他锁 的事务回滚

6.事务日志

记录下你的操作,等你提交后慢慢写回到磁盘,注意事务日志是时刻写到磁盘的,虽然需要写2次,但是因为写日志是连续的,写表数据是不连续的,所以写日志可以减少许多寻道时间。

7.mysql中的事务

①mysql默认自动提交:如果不显示指定开启事务,每个查询都会被当成事务提交
②事务由存储引擎实现(服务器层无关),所以一个事务中最好只使用一种存储引擎:如果混用InnoDB和MyISAM表,执行回滚时,前者回滚成功,后者不可以回滚,处于不一致状态
③事务执行过程中随时可能执行行锁定,COMMIT或者ROLLBACK时,释放锁(两端锁协议)(InnoDB会自动加行级锁,所以如果不是必要,不需要使用显示锁)

8.多版本并发控制MVCC

MVCC的实现是通过保存数据在某个时间点的快照实现的,根据事务开始时间不同,每个事务对同一张表,同一时刻看到的数据是不一样的(看到的是事务开始时刻的数据)
★:InnoDB的MVCC是通过在每个记录后面保存两个隐藏的列来实现的。这两个列一个保存行的创建时间,一个保存行的过期时间(是不实际时间而是版本号)。没开启一个新事务,系统版本号就会加一。事务开始时刻系统的版本号就是事务的版本号,用来和查询到的每行记录的版本号相比较
☆REPEATABLE READ隔离下的MVCC原理:
select:产生于本事务或之前,死亡于本事物之后
insert:为插入的每一行保留事务的版本号
delete:保留当前本版本号作为行删除标记
update:先插入一行,在删除一行
优点:大部分读操作都不用加锁
缺点:每一行记录都需要额外的存储空间,更多的行检查工作,额外维护工作
MVCC只在可重复读和提交读两个隔离级别下工作

9.mysql存储引擎

a.mysql将每个数据库保存为数据目录下的一个子目录(就是数据库是一个目录)
b.创建表时,会在数据库子目录下创建一个和表同名的.frm文件保存表的定义
c.mysql使用文件系统的目录保存数据库,文件保存表定义(这不就是重复ab吗?)

10.InnoDB

a.inndb是mysql的默认事务性引擎,它被用来处理大量的短期事务(短期事务大部分情况是正常提交的,很少会被回滚),有自动崩溃回复特性
b.innodb的数据存储在表空间,表空间是由innodb管理的一个黑盒子,有一系列的数据文件组成,4.1版本后innodb将每个表的数据和索引放在单独文件中
c.innodb采用MVCC来支持高并发,实现了四个隔离级别,默认可重复读,通过间隙锁防止幻读(会对索引间隙进行锁定,防止幻影行)
d.innodb表基于聚簇索引,存储格式平台独立
e.innodb内部优化,(从磁盘读时,采用可预测性预读)

11.MyISAM存储引擎

a.有大量特性:全文索引、压缩、空间函数(GIS)
b.MyISAM会将表存储在两个文件中:数据文件和索引文件,分别以.MYD和.MYI为扩展名
c.MyISAM表可以包含动态或者静态行(长度不固定或者固定)(变长行只能处理256TB数据,因为指针长度6字节)
d.加锁对表锁定,读锁时可插入数据(不可以修改)
e.BLOB和TEXT字段可以基于前500个字符创建索引(全文索引)
f.延迟更新索引键 DELAY-KEY-WRITE,每次修改不会立刻写道磁盘而是写到内存中的键缓冲区,只有清除缓冲区或者关闭表时才写回磁盘
g.MyISAM压缩表,如果表不再修改可以用,因为解压缩速度 已经大于I/O速度了,压缩式行独立压缩,需要那行解压哪行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值