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会解 ...
随机推荐
- Java中的线程--Lock和Condition实现线程同步通信
随着学习的深入,我接触了更多之前没有接触到的知识,对线程间的同步通信有了更多的认识,之前已经学习过synchronized 实现线程间同步通信,今天来学习更多的--Lock,GO!!! 一.初时Loc ...
- Cocos2d-X研究之3.0 场景切换特效汇总
Cocos2d-X研究之3.0 场景切换特效汇总 2014-08-05 0个评论 来源:游戏编程 收藏 我要投稿 cocos2d-x 3.0中场景切换特效比较多,而且游戏开 ...
- 重置windows用户漫游配置文件
1.备份用户数据 2.删除或修改漫游配置文件 3.用户PC管理员登陆,删除本地用户缓存文件 注册表打开: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows N ...
- 四、10分钟ToPandas_0.24.2
# Author:Zhang Yuan整理,版本Pandas0.24.2 # 0. 习惯上,我们会按下面格式引入所需要的包: import pandas as pd import numpy as n ...
- (转)iOS 最佳实践
本文转自http://www.jianshu.com/p/b0bf2368fb95 感谢作者和译者 iOS最佳实践 iOS最佳实践 译者注 本文翻译自 futurice 公司的 iOS Good Pr ...
- DSP中-stack和-heap的作用
-stack 0x00000800-heap 0x00000800 stack - 又称系统栈(system stack),用于: 保存函数调用后的返回地址; ...
- Java中TreeMap集合讲解
1.TreeSet介绍 TreeSet是一个有序集合,可以以任意顺序将元素插入到集合中,在对集合进行遍历的时候,每个元素将自动按照排序后的顺序呈现.底层使用的是二叉树(更具体点是红黑树)实现,对于元素 ...
- 1,python初识
什么是变量? 变量:将程序的中间结果暂时存储起来,以便后续程序调用. 什么是字符串类型? python中被引号引起来的数据就是字符串.字符串类型,也简称str类型. 在python中 int是什么? ...
- Matplotlib绘图属性(1)
[matplotlib颜色.形状.线型等详细配置方法] #1.颜色(三种方法)-color 八种内置颜色及其缩写: b:blue <蓝色> c:cyan <青色> g:gree ...
- POJ-2078 Matrix,暴力枚举!
Matrix 题意:一个n*n的数字矩阵,每次操作可以对任意一行或者一列进行循 ...