Open loadlj opened 6 years ago
基本架构: 客户端->(缓存or解析器)->优化器->存储引擎
客户端一个连接为一个线程
mysql会解析查询,构建内部数据结构(查询树),然后对其进行优化。进行select查询会优先进行缓存查找,没有的话再进行优化等一系列后续的行为。
读锁是共享的,互不阻塞。写锁具有排他性,在给定时间只能有一个写入动作。
开销最小的锁,锁定整张表
可以较大程度的支持并发,只在最底层就是存储引擎实现
一组原子性的sql查询,或者说是独立的工作单元,acid,原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability)
两个事务或者多个事务在同一资源互相暂用,发生后只能回滚其中一个事务。
mysql采用自动提交的模式(autocommit)如果不显示的开启一个事务,每个查询都会被当成事务, 事务型的表InnoDB和非事务型的表MyISAM也可混合使用。InnoDB采用两端锁定,在事务执行的过程中随时都可以执行锁定,只有在commit或者roolback后才会释放,这个叫做隐式锁定。另外显示锁定可以通过特殊的语句锁定。
mvcc可以认为是行级锁的一个变种,但是避免了加锁操作,mvcc的实现是通过某个时间点快照实现的,不管需要执行多久,事务看到的数据都是一样的。InnoDB的mvcc是保存两个隐藏的列实现的,一个保留的行的创建时间,一个是行的过期时间。每开始一个事务后,系统的版本号自动递增,事务开始时刻的版本号作为事务的版本号
在文件系统中,mysql将数据库保存为数据目录下的子目录,在数据库的子目录下保存和表同名的frm文件
InnoDB是mysql的默认事务型引擎
MyISAM是Mysql5.1版本之前的默认版本,不支持事务和行级锁
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版本之前的默认版本,不支持事务和行级锁