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会解 ...
随机推荐
- Bootstrap历练实例:禁用的按钮
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- div section article区分--20150227
div section article ,语义是从无到有,逐渐增强的.div 无任何语义,仅仅用作样式化或者脚本化的钩子(hook),对于一段主题性的内容,则就适用 section,而假如这段内容可以 ...
- biological clock
'''this application aimed to cauculate people's biological block about emotional(28), energy(23),int ...
- 牛客网暑期ACM多校训练营(第五场)F take(概率, 递推)
链接: https://www.nowcoder.com/discuss/84119 题意: 给定n个箱子, 每个箱子打开发现钻石的概率P(这里的P要除100), 每个钻石的重量, 有一个人只能持有一 ...
- Python开发:网络编程
Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络 ...
- python数据类型小结
变量 变量是 为了存储程序 运算过程中的一些中间结果,为了方便日后调用. 变量的命名规则1.要有描述性2.变量名只能_,数字,字母组成,不可以是特殊字符(#)3.不能以中文为变量名4.不能以数字开头5 ...
- pycharm调整字体大小
问题:pycharm的默认字体比较小,看起来费眼睛 解决办法: 1.打开 file-->settings 2.Editor-->font 注意:没有修改过的需求先保存一下才能修改size
- 2014 ACM/ICPC Asia Regional 北京 Online
G - Grade Ted is a employee of Always Cook Mushroom (ACM). His boss Matt gives him a pack of mushroo ...
- Windows Server AppFabric
文章:Windows Server AppFabric简介 介绍了AppFabric强大的功能.
- Android单个按钮自定义Dialog
代码改变世界 Android单个按钮自定义Dialog dialog_layout.xml <?xml version="1.0" encoding="utf-8& ...