loadlj / blog

19 stars 6 forks source link

mysql初识 #14

Open loadlj opened 6 years ago

loadlj commented 6 years ago

mysql架构

基本架构: 客户端->(缓存or解析器)->优化器->存储引擎

客户端

客户端一个连接为一个线程

优化与执行(mysql服务器)

mysql会解析查询,构建内部数据结构(查询树),然后对其进行优化。进行select查询会优先进行缓存查找,没有的话再进行优化等一系列后续的行为。

并发

读写锁

读锁是共享的,互不阻塞。写锁具有排他性,在给定时间只能有一个写入动作。

锁粒度

表锁(table lock)

开销最小的锁,锁定整张表

行级锁(row lock)

可以较大程度的支持并发,只在最底层就是存储引擎实现

事务

一组原子性的sql查询,或者说是独立的工作单元,acid,原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability)

隔离级别

死锁

两个事务或者多个事务在同一资源互相暂用,发生后只能回滚其中一个事务。

事务

mysql采用自动提交的模式(autocommit)如果不显示的开启一个事务,每个查询都会被当成事务, 事务型的表InnoDB和非事务型的表MyISAM也可混合使用。InnoDB采用两端锁定,在事务执行的过程中随时都可以执行锁定,只有在commit或者roolback后才会释放,这个叫做隐式锁定。另外显示锁定可以通过特殊的语句锁定。

多版本并发控制

mvcc可以认为是行级锁的一个变种,但是避免了加锁操作,mvcc的实现是通过某个时间点快照实现的,不管需要执行多久,事务看到的数据都是一样的。InnoDB的mvcc是保存两个隐藏的列实现的,一个保留的行的创建时间,一个是行的过期时间。每开始一个事务后,系统的版本号自动递增,事务开始时刻的版本号作为事务的版本号

存储引擎

在文件系统中,mysql将数据库保存为数据目录下的子目录,在数据库的子目录下保存和表同名的frm文件

InnoDB引擎

InnoDB是mysql的默认事务型引擎

MyISAM引擎

MyISAM是Mysql5.1版本之前的默认版本,不支持事务和行级锁