1.MySQL架构与历史

MySQL架构与历史

重点摘要

MySQL的逻辑架构分为三层

1.连接层,负责连接处理,授权认证,安全登

2.服务层,负责查询解析,分析,优化,缓存及所有函数,包括存储过程,触发器,试图等.

3.存储引擎层主要负责数据的提取与存储.

MySQL会解析查询,创建内部数据结构,进行优化包括重写查询,决定表的读取顺序,选择合适的索引.

处理并发读或者写时可以通过实现由共享锁(读锁)和排他锁(写锁)组成的系统来解决问题.

锁的粒度一般分为表锁和行锁,锁定的数据量越少,并发的程度越高,开销也越大

服务器层 和存储引擎层 都有自己的锁,例如在执行ALTER TABLE的时候会使用服务器的锁忽略存储引擎的锁机制.

1.原子性:事务中的sql不可单独执行或者只执行部分,事务就是一个最小的单元,必须要全部执行或者全部不执行.

2.一致性:事务中的sql要么全部执行 要么全部失败.事务中的所有状态都必须一致的转变.

3.隔离性:A事务在执行到一半的时候,B事务无法获取A事务中已经执行完SQL结果

4.持久性:一旦事务提交,数据就会永久保存到数据库中.

事务的隔离级别分为四种,未提交读,不可重复读,可重复读,串行化,并不是所有的存储引擎都支持四种隔离级别.

事务的隔离界别会解决三个问题,脏读,重复读,幻读

未提交读: A事务可以读取到B事务中未提交的修改内容,存在脏读风险

不可重复读: 一个事务在开始和提交之前,其他事务均不可见,可以解决脏读问题,但是无法解决重复读问题, A事务中两次同样的查询可能会得到不一样的结果.

可重复读:这是MySQL的默认级别,可以解决重复读的问题,但是无法解决幻读问题,幻读和重复读的区别为幻读针对Insert和重复读针对update. InnoDB引擎通过MVCC解决了幻读问题.

串行化: 可以解决三种问题,但是性能最低

MySQL大多数的事务性引擎是实现的行级锁都不是简单的行级锁,基于提升并发性能考虑,他们都实现了多版本并发控制(MVCC)

可以理解MVCC属于行级锁的变种但是在大多数情况能避免加锁操作,

InnoDB的MVCC是通过每行记录的两个隐藏字段控制的(创建版本,删除版本)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容