1.MySQL逻辑架构

MySQL存储引擎架构:将查询处理以及其他任务系统和数据的存储处理分离开来,这样做的好处在于可以根据需要灵活选择存储引擎。

  • 第一层架构 —— 连接处理、授权认证、安全等。
  • 第二层架构 —— MySQL的核心服务功能:存储过程、触发器、视图、查询缓存、查询解析、查询优化、函数等等。
  • 第三层架构 —— 实现了不同的存储引擎,存储引擎负责MySQL中数据的存取.

2.并发控制

 2.1 读写锁

读锁是共享的,互相不阻塞的,多个客户端在同一时刻可以同时读取同一个资源而不互相影响.
写锁是排他的,写锁会阻塞其他的写锁和读锁,这样可以保证在给定的时间里面只有一个客户端在写入.

 2.2 锁粒度

系统不应该花费巨大的性能来管理锁,因此需要在安全性和锁开销之间寻找平衡点,两种锁策略:

  • 表锁:锁定整张表.一个用户在对一张表写操作(增删改)时,获取到写锁,阻塞其他用户的所有读写操作.(开销小)
  • 行级锁:简单理解为锁住写操作涉及的记录行.(最大程度的支持并发,开销高)

3.事务

3.1 ACID
  • 原子性:一个事务是一个不可分割的最小单位,整个事务的所有操作要么全部成功要么全部失败回滚.
  • 一致性:数据库总是从一个一致的状态转移到另一个一致的状态,事务没有提交数据不会持久化到磁盘中.
  • 隔离性:通常来说,一个事务在未提交之前对其他事务来说是不可见的.
  • 持久性:一旦事务成功提交,操作完的数据就会北保存到数据库中.
3.2 事务的隔离级别
  • read uncommitted:(未提交读)即便事务没有提交,对其他事务也是可见的,即事务可以读取到未提交的数据,脏读.
  • read commit:(提交读)一个事务在提交之前,对其他事务而言是不可见的,即不可重复读.
  • repeatable read:(可重复读)一个事务可以多次读取同一条记录,解决了脏读,会出现幻读.MySQL的默认隔离级别.
  • serializable:(串行化)强制让事务串行化,隔离级别的最高级.
3.3 死锁

两个及以上的事务在同一资源上互相占用,并请求锁定对方占用的资源.死锁检测和死锁超市机制的出现在一定程度上避免了死锁的问题.

3.4 事务日志

使用事务日志,存储引擎只需要在修改表数据的时候修改内存拷贝,再把该修改行为记录到持久到硬盘上的事务日志中,而不用每次都把修改的数据本身持久化到硬盘上.

3.5 MySQL的事务

MySQL事务两种事务引擎:InnoDB和DBN Cluster.其中MySQL采用了自动提交事务的模式,

4.多版本并发控制

MySQL的大多数事务性存储引擎都不是简单的行级锁,他们几乎都实现了多版本并发控制(MVCC),MVCC是通过保存数据在某个时间点的快照来实现的.典型的有乐观并发控制和悲观并发控制。InnoDB的MVCC是通过在每个记录的后面保存两个隐藏列来实现的:一个保存行创建时间,一个保存行过期时间(删除时间),其中保存的不是实际时间,二十系统版本好,,每开始一个新的事务,版本号自动增加。事务开始时的系统版本号就作为事务版本号用来和查询到的每行记录进行比较。
以下是repeatable read隔离级别下,MVCC的操作:

  • SELECT
    InnoDB会根据下面两个条件检查每行记录;
    1. 只查找版本早于当前事务版本的数据行(小于等于事务的系统版本号)。确保事务读取的行,在事务开始之前就存在的,或者是事务自身插入或者修改过的。
    2. 行的删除版本号要么未定义,要么大于当前事务版本号。确保事务查询到的行,在事务开始之前没被删除。
    只要符合上述两个条件的记录,才能返回作为查询结果

  • insert操作:InnoDB为新插入的每一行保存当前系统版本号为行创建版本号。

  • delete操作:InnoDB为删除的行保存当前系统版本号作为行删除版本号。

  • update操作:InnoDB为插入一行新数据保存当前版本号作为该新行行创建版本号,同时保存当前系统版本号到原来的行作为行删除版本号。

MVCC只在repeatable read和read committed两个隔离级别下工作。其他两个隔离级别都和MVCC不兼容,因为read committed总是读取最新的数据行,而不是符合当前事务版本的数据行。而serializable则会对所有读取的行都加锁。

5.MySQL的存储引擎

5.1 InnoDB存储引擎

InnoDB是MySQL的默认存储引擎,InnoDB采用MVCC来支持高并发,并且实现了四个标准的隔离级别。其默认级别是repeatable read(可重复读),并且通过间隙锁(next-key locking)策略防止幻读的出现。间隙锁使得InnoDB不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,以防止幻影行的插入。

5.2 MyISAM 存储引擎

MyISAM包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务和行级锁,缺陷:崩溃后无法安全恢复。如果表在创建并导入数据以后,不会再进行修改操作,那么这样的表比较适合采用MyISAM压缩表

第一章:MySQL架构和历史的更多相关文章

  1. 高性能MySQL(第4版) 第一章 MySQL架构 读书笔记

    这本书去年11月出的,今年中文版也出了,并且直接上了微信读书,之后有空就读一读,分享下读书笔记~ 原文内容比较充实,建议有时间可以读一下原文. 第一章主要是个概览. MySQL的逻辑架构 默认情况下, ...

  2. 高性能mysql 第1章 mysql架构与历史

    mysql逻辑架构图: 第一层 客户端 第二层(服务层):针对所有类型的存储引擎可以公共提取的部分.将存储引擎抽离之后的其他部分都在这里.如:查询解析,分析优化,内置函数,存储过程,触发器,视图. 第 ...

  3. 高性能mysql笔记 第一章 mysql架构

    1.1  mysql逻辑结构 第一层: 负责连接处理,授权认证,安全等事情 第二层:负责mysql的大部分核心功能 ,查询解析,分析,优化,缓存和所有的内置函数,所有跨存储引擎的功能都在这一层实现,, ...

  4. mysql笔记01 MySQL架构与历史、Schema与数据类型优化

    MySQL架构与历史 1. MySQL架构推荐参考:http://www.cnblogs.com/baochuan/archive/2012/03/15/2397536.html 2. MySQL会解 ...

  5. MySQL性能调优与架构设计——第2章 MySQL架构组成

    第2章 MySQL架构组成 前言   麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成, ...

  6. 第一章 MYSQL的架构和历史

    在读第一章的过程中,整理出来了一些重要的概念. 锁粒度  表锁(服务器实现,忽略存储引擎). 行锁(存储引擎实现,服务器没有实现). 事务的ACID概念 原子性(要么全部成功,要么全部回滚). 一致性 ...

  7. 第 2 章 MySQL 架构组成

    麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成,希望能够让读者对 MySQL 有一个更 ...

  8. 第一章 mysql 的架构与历史

    一.mysql 的逻辑架构 1.连接管理与安全性 2.优化与执行 二.并发控制 1.读写锁 2.锁粒度 三.事物 1.隔离级别 2.死锁 3.事物日志 四.多版本并发控制 五.Mysql 的存储引擎

  9. 高性能MySQL——第一章MySQL的架构与历史

    1.可以使用SHOW TABLE STATUS查询表的相关信息. 2.默认存储引擎是InnoDB,如果没有什么很特殊的要求,InnoDB引擎是我们最好的选择. 3.mysql的infobright引擎 ...

随机推荐

  1. JuJu团队12月28号工作汇报

    JuJu团队12月28号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 飞飞 完成GUI 待安排 无 婷婷 调试代码 提升acc 无 恩升 修正evaluate 修正evalu ...

  2. WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 的解决办法

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS ...

  3. PhoneGap简易配置使用

    在Android Studio 里新一下Android项目, 这个不用说了. 链接: https://pan.baidu.com/s/1qYcCBEW 密码: ymhh 添加 cordovaapp-c ...

  4. css调试与样式优先级

    如何查看一个标签的当前css样式 如上图所示 先用标签选择器选择某个标签 然后在elements区域就会自动找到该标签 然后在右侧的styles区域整个区域都是该标签的样式,从上到下是显示的优先级,被 ...

  5. 程序员如何 10 分钟用 Python 画出蒙娜丽莎?

    之前看到过很多头条,说哪国某人坚持了多少年自学使用excel画画,效果十分惊艳.对于他们的耐心我十分敬佩. 但是作为一个程序员,自然也得挑战一下自己. 这种需求,我们十分钟就可以完成! 基本思路   ...

  6. WinForm_UI设计

    下载

  7. 自定义对象使用 ArrayList 进行增删改查(dos程序)

    马上要进行java基础考试了,闲着写一次博客,把这10周学的东西过一遍,可能没过全,.....但是我觉得增删改查是必须的,以前一直不会用ArrayList  自定义对象....... 案例如下:自己根 ...

  8. weblogic-开发模式与生产模式互换

    生产转开发 Step 1: 目标文件:domain/bin/setDomainEnv.sh 修改内容:PRODUCTION_MODE="true"改为PRODUCTION_MODE ...

  9. java排序,效率高的是哪种排序方法

    和所有其他语言是一样的.应该还是快速排序效率最高. public static void bubbleSort(int a[]) {int len = a.length;for (int i = 0; ...

  10. 对于python 3.x与python2.x中新型类的继承特性总结

    (1)一般性继承特性 """ 该文件对于python 3.x 及python 2.x的New-style 类的一般性继承特性进行了说明和测试. (1)实例的继承特性:搜寻 ...