一、架构
1、连接/线程处理,客户端连接时会在服务器进程中拥有一个线程去执行操作,并且该线程会被缓存(类似于java的线程池机制)。
2、查询解析、分析、优化、缓存已经所有内置函数,存储引起功能在这一层实现。
3、存储引擎,负责数据的存储和提取,服务器通过api与存储引擎进行通信
逻辑架构图
二、并发控制
尽量只锁定需要修改的部分数据,而不是所有资源
1、表锁:如:进行alter table之类的操作
2、行锁,只在存储引擎层实现,mysql服务层没有实现。
三、事务
ACID
原子性:事务被视为不可分割的单元
一致性:数据库总是从一个一致性状态转换到另一个一致性状态
隔离性:事务所做的修改在提交前,对其他事务时不可见的
持久性:事务一旦提交,所做的修改会永久保存到数据库中
事务隔离级别
mysql的事务隔离级别是repeatable read(可重复读),保证在同一个事务中多次读取同样的记录结果是一致的。会有幻读风险,mvcc进行解决这个问题。
死锁
当多个事务以不同顺序锁定资源时(事务1where b=1 where b=2;和事务2 where b=2 where b=1),就可能产生死锁。
数据库有死锁检验超时机制,Innodb检测到死锁循环依赖时会立刻返回一个错误。持有最少行的排它锁事务进行回滚。
四、多版本并发控制(MVCC)
1、InnoDB的mvcc,是通过在每行激烈后面保存两个隐藏的列来实现的。一列时创建时间版本号,一列是删除时间版本号。
2、每开启一个事务,系统版本号会自动递增
五、存储引擎
简介
MySQL将每个数据库保存为数据目录下的一个子目录,创建表时会在这个目录下建立tablename.jrm文件
window系统大小写敏感,unix系统大小写不敏感。
InnoDB
1、被设计处理大量短期事务,性能好和自动崩溃恢复特性
2、采用MVCC支持高并发,事务隔离级别是repeatable read(可重复读),通过间隙锁防止幻读,使得其不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,防止幻读行的插入。
3、基于聚簇索引建立的,Mysql其它索引不支持热备份。