MySql的架构和历史
1.1、mysql的逻辑架构
架构为如下:
存储引擎:负责数据的储存和提取,供了几十个API供服务层进行调用。各个存储引擎之间不会进行交互,只是供服务层进行调用。事务控制和锁的管理也是在存储引擎里面进行。
服务层:一个sql过来之后,会在服务层进行解析,建立解析树,调用底层的存储引擎得到各种开销信息和统计信息,进行各种优化,决定表的读取顺序以及选择合适的索引。

1.2 并发控制
1、 mysql通过加读锁和写锁来进行并发控制。
2、锁的粒度
表锁 并发程度低,锁的开销小 alter table 会加表锁
行级锁 并发程度高,但是锁的开销大
3、锁的控制是在存储引擎里面实现的,所以不同的存储引擎加锁的顺序是不一样的,有的能引起死锁有的则不会。
1.3事务
事务的ACID属性
原子性:一个事务的操作要么全部执行成功,要么全部失败回滚。
一致性:在执行事务的第3,4条语句的时候数据库崩溃了,数据还是一致的。
隔离性:一个事务的操作对另一个事务的可见性。Mysql默认为可重复读。
持久性:一旦事务提交,其所做的修改就会永久的同步到数据库中。
1.3.1隔离级别
read uncommited(读未提交) 造成脏读
read commited(提交读) 造成不可重复读
oracle和sql server默认是这种级别
repeatable read(可重复读) 造成幻读
mysql默认是此级别(通过MVCC和锁机制)
mysql通过mvcc和间隙锁解决了幻读的问题
seriable(可串行化)
事务是串行执行的
1.3.2死锁
因为请求资源的方式不一致可能导致死锁
数据库系统实现死锁检测,解除死锁,和请求锁超时等机制。
如果死锁发生,会将含有最少行级锁的事务进行回滚来解除死锁。
1.3.3 事务日志
因为更新数据到磁盘上数据分布的不均匀,所以花费的时间比较长。但是可以将操作以日志的形式添加到日志文件末尾,日志的存储操作是有序的。这能加快速度。
1.3.4mysql的事务
1、默认每个连接都是AutoCommit,可以在建立连接之后通过命令 show variables like 'AUTOCOMMIT'来查看当前的状态。
可以通过 set AUTOCOMMIT=0来设置事务不是自动提交的。那么所有查询都是在一个事务里,直到显式的进行提交或者进行回滚。
2、一些操作会自动提交当前的事务,如alter table,lock tables
3、设置事务的隔离级别(可以设置全局的和会话级别的)
可以通过set transaction isolation level来设置全局的事务隔离级别
可以通过set session transaction isolation level 设置本链接的隔离级别,并在下次事务中生效。
1.3.5混合使用存储引擎
1、不推荐这样使用
2、如果一个事务同时操作支持事务的存储引擎表和不支持事务的存储引擎表,如果事务成功提交则没什么问题。如果事务回滚,则支持事务的存储引擎表能回滚,但是不支持事务的存储引擎表不能回滚,会造成数据一致性问题。
MySql的架构和历史的更多相关文章
- MySQL之架构与历史(一)
MySQL架构与历史 和其他数据库系统相比,MySQL有点与众不同,它的架构可以在多种不同的场景中应用并发挥好的作用,但同时也会带来一点选择上的困难.MySQL并不完美,却足够灵活,它的灵活性体现在很 ...
- MySQL之架构与历史(二)
多版本并发控制 MySQL的大多数事务型存储引擎实现的都不是简单的行级锁.基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC).不仅是MySQL,包括Oracle.PostgreSQ ...
- MySQL的架构与历史
MySQL的最主要特性是它的存储引擎架构,这种架构设计将查询处理以及其他系统任务和数据的存储/提取相分离. MySQL最上层服务是一些如连接处理,授权认证,安全等. MySQL的核心服务功能大部分度在 ...
- 《高性能mysql》笔记(第一章,mysql的架构与历史)
mysql的服务器逻辑架构图如下: 目前工作用的5.5版本,5.5版本开始mysql开始将innoDB作为默认的存储引擎,innoDB的表是基于聚簇索引建立的. mysql的存储引擎锁管理非常重要,在 ...
- 第一章 mysql 的架构与历史
一.mysql 的逻辑架构 1.连接管理与安全性 2.优化与执行 二.并发控制 1.读写锁 2.锁粒度 三.事物 1.隔离级别 2.死锁 3.事物日志 四.多版本并发控制 五.Mysql 的存储引擎
- 高性能MySQL——第一章MySQL的架构与历史
1.可以使用SHOW TABLE STATUS查询表的相关信息. 2.默认存储引擎是InnoDB,如果没有什么很特殊的要求,InnoDB引擎是我们最好的选择. 3.mysql的infobright引擎 ...
- 《高性能MySQL》——第一章MySQL的架构与历史
1.可以使用SHOW TABLE STATUS查询表的相关信息. 2.默认存储引擎是InnoDB,如果没有什么很特殊的要求,InnoDB引擎是我们最好的选择. 3.mysql的infobright引擎 ...
- 第一章 MYSQL的架构和历史
在读第一章的过程中,整理出来了一些重要的概念. 锁粒度 表锁(服务器实现,忽略存储引擎). 行锁(存储引擎实现,服务器没有实现). 事务的ACID概念 原子性(要么全部成功,要么全部回滚). 一致性 ...
- mysql笔记01 MySQL架构与历史、Schema与数据类型优化
MySQL架构与历史 1. MySQL架构推荐参考:http://www.cnblogs.com/baochuan/archive/2012/03/15/2397536.html 2. MySQL会解 ...
随机推荐
- a标签目标链接问题
1.先确定开始文件和目标文件,例如从css.html开始到body.html 2.确定文件寻找路径,因为css.html的父目录是css,而body.html在body目录下,所以需要先退到上一目录h ...
- Hibernate 多表查询 - Criteria添加子字段查询条件 - 出错问题解决
Criteria 查询条件如果是子对象中的非主键字段会报 could not resolve property private Criteria getCriteria(Favorite favori ...
- tomcat假死现象(转)
1.1 编写目的 为了方便大家以后发现进程假死的时候能够正常的分析并且第一时间保留现场快照. 1.2编写背景 最近服务器发现tomcat的应用会偶尔出现无法访问的情况.经过一段时间的观察最近又发现有台 ...
- PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20)
PAT (Basic Level) Practise (中文)- 1022. D进制的A+B (20) http://www.patest.cn/contests/pat-b-practise/1 ...
- POI创建生成excel及设置相关属性
简单的读写到excel中: import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io. ...
- EXTJS中文乱码
在<head>中加入 <meta http-equiv="Content-Type" content="text/html; charset=GB231 ...
- Spring框架针对dao层的jdbcTemplate操作crud之query查询数据操作
查询目标是完成3个功能: (1)查询表,返回某一个值.例如查询表中记录的条数,返回一个int类型数据 (2)查询表,返回结果为某一个对象. (3)查询表,返回结果为某一个泛型的list集合. 一.查询 ...
- MySql压缩版安装及避免1055错误和msvcp120.dll丢失
MySql压缩版安装及避免1055错误和msvcp120.dll丢失 MySQL压缩版的安装快速方便,5.7及最新的8版本安装方式大致相同. 在使用group by分组时,可能会遇到1055错误. 另 ...
- fshc之请求仲裁机制的代码分析
always@(posedge spi_clk or negedge spiclk_rst_n) begin if(~spiclk_rst_n) arbiter2cache_ack_r <='b ...
- cache控制器取值从TCM/CACHE/FLASH
cache 控制器顶层有4组接口,分别为输入I/D bus ,输出TCM bus /Cache bus /direct flash bus (走cache ID bus matrix) flash 控 ...