它的架构可以在多种不同场景发挥好的作用,同时也会带来一点选择上的困难。MySQL并不完美,却足够灵活。
它最与众不同的是它的存储引擎,这种架构的设计将查询处理及其他任务和数据的存储/提取相分离。


1.1 MySQL逻辑架构
1客户端
2 连接/线程处理
查询缓存<——解析器
优化器
3存储引擎(负责数据的存储和提取,服务器通过API和存储引擎通信,除InnoDB外不会解析SQL,InnoDB会解析外键)

第二层:常用功能:查询缓存,解析,优化
第三层:服务器通过API与存储引擎通信,存储引擎负责数据的存储和提取,只会简单响应上层的需求


1.1.1 连接管理和安全性
每个客户端连接都会在服务器端进程中留一个线程
连接成功,会继续验证是否有进行某种查询的权限

1.1.2 优化与执行
MySQL会解析查询,并创建内部数据结构(解析树),然后进行优化,包括重写查询,决定表的读取顺序,以及选择合适的索引。用户可以通过特殊的关键字提示优化器,影响它的决策过程。
优化器不关心使用了什么存储引擎,但存储引擎对优化是有影响的。


1.2并发控制
只要有多个查询需要在同一时刻修改数据,都会产生并发控制的问题。这里只讨论服务器层与存储引擎层。
1.2.1 读写锁
也叫共享锁和排他锁。某用户修改某数据时,锁定防止其他用户读取同一数据。
1.2.2 锁粒度
尽量只锁需要修改的部分数据,而不是所有的资源。锁定数据量越少,系统的并发度越高。
大多数数据库系统一般是在表上施加“行级锁”,并以各种复杂的方式来实现。
而MySQL提供了多种选择,每种MySQL存储引擎可以实现自己的锁策略和锁粒度。

表锁

表锁是MySQL基本的锁策略,并且是开销最小的策略。
它会锁定整张表,用户对表进行写操作,需要获得写锁,这会阻塞其他用户对表的所有读写操作。没有写锁时,其他用户才能获得读锁。写锁比读锁有更高的优先级,可能会被插入到读锁队列的前面。

行级锁

可以最大程度地支持并发处理,同时也带来最大的锁开销。行级锁只在存储引擎层实现。


1.3 事务
事务就是一组原子性的SQL查询,或者说一个独立的工作单元。要么全部执行,要么全部失败。
一致性:只能由一个完整的状态到另一个完整的状态
我理解为操作都成功了,但其中数值不能有错误。还是中间状态外部不能看到。
原子性并不能完全保证一致性

ACID:原子性,一致性,隔离性,持久性


1.3.1 隔离级别
READ UNCOMMITED 未提交读(脏读):其实没有提交,对其他事务也是可见的。
READ COMMITED 提交读(不可重复读):正常数据库系统的默认隔离级别
可重复读:解决脏读问题,保证同一事务中多次读取记录一样。不能解决幻读:读取一定范围时,另一个事务有插入了新的记录(InnoDB通过多版本并发控制MVVC解决了幻读)
可串行化:最高的隔离级别。会在读取的每一行都加上锁。


1.3.2 死锁
InnoDB目前解决死锁:将持有最少行级锁的事务回滚
锁的行为和顺序和存储引擎是相关的。死锁产生原因:数据冲突、存储引擎的实现。
解决:部分或完全回滚其中一个事务


1.3.3 事务日志
使用事务日志,修改表的数据只需修改内存拷贝,再把修改行为记录到持久在磁盘的日志中。修改数据需要写两次磁盘。


1.3.4
锁只有COMMIT或ROLLBACK时才会释放
除了事务中禁用AUTOCOMMIT,可以用LOCK TABLES外,其他不要用


1.4 多版本并发控制
大多数存储引擎使用的不是简单的行级锁,基于并发性能的考虑,还使用了MVCC。可以认为它是行级锁的变种,很多情况下避免了加锁。
它是通过保存数据在某个时间点的快照来实现的。实现了非阻塞的读操作,锁定必要的行。
SELECT:InnoDB只查找版本早于当前事务版本的数据行
行的删除版本要么未定义,要么大于当前事务版本号
INSERT:保存当前系统版本号作为行版本号
DELETE:保存当前系统版本号作为删除标识

不足之处是每行都需要额外的存储空间

MVCC只在重复读和提交读两个隔离级别工作。


1.5 MySQL的存储引擎
创建表时,Mysql会在数据库子目录下创建和表同名的.frm文件保存表的定义。
InnoDB是MySql 5.5后的默认事务性引擎,用来处理大量的短期事务,它的性能和崩溃自动恢复特性,使之流行。
InnoDB通过间隙锁防止幻读。
InnoDB表通过聚簇索引实现的。聚簇索引对主键查询有很强的性能
能够从磁盘读取数据时采用可预测性读。
支持在线热备份。


1.5.2 MyIsam引擎
MySQL5.1前,它是默认存储引擎。有大量特性,但不支持事务和行级锁,崩溃后无法安全修复

下面的很多小节不太需要记住,就不写啦~

《高性能MySQL》 第1章 MySQL架构与历史相关推荐

  1. 高性能mysql_「高性能MySQL」十年阿里架构师推荐,这份高性能MySQL文档送给你

    MySQL MySQL的概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方 ...

  2. 关于高性能mysql的读书报告_《高性能MySQL》读书笔记:第一章[MySQL架构与历史]...

    <高性能MySQL>读书笔记:第一章[MySQL架构与历史] MySQL逻辑架构 MySQL最优秀的一点就是它的存储架构,将查询处理,系统任务,数据存储/提取相分离 并发控制 通过读写锁实 ...

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

    1 MySQL架构与历史 1.1 MySQL逻辑架构 MySQL服务器逻辑架构图 最上层:不是MySQL独有,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构. 比如连接处理. 授权认证. ...

  4. 《高性能MySQL》——架构与历史(笔记)

    文章目录 一.MySQL架构与历史 1.1.1 连接管理与安全性 1.1.2 优化与执行 1.2 并发控制 1.2.1 读写锁 1.2.2 锁粒度(锁模式) 表锁(table lock) 行级锁(ro ...

  5. MySQL性能调优与架构设计——第4章 MySQL安全管理

    第4章 MySQL安全管理 前言 对于任何一个企业来说,其数据库系统中所保存数据的安全性无疑是非常重要的,尤其是公司的有些商业数据,可能数据就是公司的根本,失去了数据的安全性,可能就是失去了公司的一切 ...

  6. MySQL性能调优与架构设计——第5章 备份与恢复

    第5章 备份与恢复 前言 数据库的备份与恢复一直都是 DBA 工作中最为重要的部分之一,也是基本工作之一.任何正式环境的数据库都必须有完整的备份计划和恢复测试,本章内容将主要介绍 MySQL数据库的备 ...

  7. 高性能mysql 第六章_第六章 查询性能优化

    1. 为什么查询速度会慢 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化,无非是减少子任务数量,或者减少子任务的执行次数. 查询声明周期:生成计划,执行, ...

  8. mysql架构组成_第 2 章 MySQL 架构组成

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

  9. 第5章 MySQL高可用架构设计

    第5章 MySQL高可用架构设计 数据库复制 复制解决了什么问题????? 非共享架构 二进制日志 binlog工具 查看日志格式 show variables like "binlog_f ...

  10. MySQL性能调优与架构设计——第11章 常用存储引擎优化

    第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...

最新文章

  1. 身份证号码验证-支持新的带x身份证
  2. CentOS6软件包管理
  3. 站立会议报告(12)
  4. 008_TreeSet使用Comparator排序
  5. Android创建数据表和LitePal的基本用法
  6. 人家可是见过大世面的
  7. PHP设计模式--数据访问对象模式
  8. 常见浏览器兼容性问题与解决方案?
  9. jaxb xsd生成xml_使用JAXB和Jackson从XSD生成JSON模式
  10. llvm编译linux,在Linux上编译LLVM/Clang 8.0.0等全部源代码
  11. ubuntu linux 搭建ftp虚拟目录
  12. EditPlus中文绿色破解版安装
  13. 易基因|脂多糖诱导的仔猪肝脏损伤模型中m6A RNA甲基化介导了NOD1/NF-kB信号激活
  14. 视频文件加密的方法浅析
  15. Leetcode995 Minimum Number of K Consecutive Bit Flips解决方案
  16. 笔记本电脑怎么找计算机硬盘,详细教您笔记本电脑怎么安装固态硬盘
  17. AI改写人类起源:黑猩猩并不是我们的祖先!
  18. 使用vite插件编写tsx文件
  19. [转载]高一语文必修一寒假作业二
  20. (翻译)表单中应使用文本域输入地址的原因

热门文章

  1. java服务发现_【Java】Eureka – 服务发现(Server)
  2. go 正则表达式分组匹配_Python正则表达式的7个使用典范(推荐)
  3. 计算机成原理第2版,清华大学出版社-图书详情-《计算机组成原理(第2版)》...
  4. matlab 提示用户输入姓名,MATLAB程序设计-asp net的作业-WinFrom控件库|.net开源控件库|HZHControls官网...
  5. 里bl2和bl3为什么分开_真正爱过的人,分开,真的会是“好散”吗?
  6. 各种版本的Visual C++编译器
  7. 兴业太阳能:将“绿色能源”带到国外
  8. pfSense添加子网的几种方式
  9. 反射与特性与Tool编写
  10. 简单实用读取字符串信息的c++类