MySQL笔记系列:MySQL架构
- MySQL逻辑架构
连接管理与安全性:
1、MySQL会为每一个客户端连接分配一个线程,这个连接的查询只会在这个单独的线程执行。服务器会负责缓存线程,因此不需要为每一个新建立的连接创建或则销毁线程。
2、当客户端连接到MySQL服务器时,服务器将对其进行身份认证。认证基于用户名、主机信息和密码,也可以基于SSL的方式进行连接。一旦客户端连接成功,服务器会继续验证该客户端是否具有执行某个特定查询的权限。
优化与执行:
1、MySQL会解析、查询,并创建内部数据结构,然后对其进行各种优化,包括重写查询、决定表的查询顺序,以及选择合适的索引等。用户可以通过特殊的关键字提示(hint)优化器,影响它的决策过程。也可以请求优化器解释优化过程的各个因素,使用户可以指定服务器时如何进行优化决策的,从而去重构查询,优化查询。
2、对于select语句,在解析查询之前,服务器会先检查查询缓存(query cache),如果能够在其中找到对应的查询,服务器不必再执行查询解析、优化和执行整个过程,而是直接返回查询缓存中的结果。
- MySQL并发控制
1、只要有多个查询需要在同一时刻修改数据,都会产生并发控制的问题。
2、MySQL可以在两个层面实现并发控制:服务器层和存储引擎层。
MySQL锁管理机制
MySQL锁的执行流程
锁粒度
- 表级锁
开销小,加锁快,不会出现死锁,锁定粒度大,发生锁冲突的概率最高,并发度最低。
- 行级锁
开销稍大,加锁慢。会出现死锁。锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
- 页面锁
开销和加锁时间介于表锁和行锁之间,会出现死锁,锁定粒度介于表锁和行锁之间,并发度一般。
表级锁的锁模式
- 表共享读锁(Table Read Lock)和表独占锁(Table Write Lock,排它锁)
- MyISAM在执行查询语句(select)前,会自动给设计的所有表加读锁,在执行更新操作(update、delete、insert等)前,会自动给设计的表加锁。对myisam表进行操作,会有以下情况:
1、对myisam表的读操作(加读锁),不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其他进程的写操作。2、对myisam表的写操作(加写锁),会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会执行其他进程的读写操作。
- 简而言之,读锁会阻塞写,但是不会阻塞读,写锁则会把读和写都阻塞。
- MySQL事务
事务的ACID特性
- 原子性(Atomicity)
一个事务必须被视为一个不可分割的最小工作单元,整个事务中所有操作要么全部提交成功,要么全部回滚。
- 一致性(Consistency)
数据库总是从一个一致性状态转换到另一个一致性状态。
- 隔离性(Isolation)
通常来说,一个事务所做的修改在最终提交前,对其他事务是不可见的。
- 持久性(Durability)
一旦事务提交,则其所做的修改会永久保存到数据库中。即使数据库崩溃,修改的数据也不会丢失。
- MySQL时间线
3.23 2001
4.0 2003
4.1 2005
5.0 2006
5.1 2008
5.5 2010
5.6 2013
MySQL5.6部分新特性
- 支持多线程复制。事实上市针对每个database开启相应的独立线程。即每个库有一个单独的SQL Thread,如果线上业务中,只有一个database或者绝大多数压力集中在个别database的话,多线程并发复制特性就没有意义了。
- 启用GTID,无须再知道binlog和POS点,需要知道master的IP、端口、账号和密码即可,因为同步复制是自动的,MySQL通过内部机制GTID自动找点同步。
- InnoDB全文检索
- InnoDB统计信息收集更加精准,执行计划更加精准。
- InnoDB Undo数据从系统表空间独立出来为单独的表空间,SSD
- InnoDB Redo日志文件大小调整为512G,以前最大为4G
- 时间类型字段Time、DataTime、Timestamp支持的粒度有秒扩展到
- MySQL开发模式
- MySQL按照用户群分为社区版和企业版
- MySQL按照更新发布为:
GA(General Availability):官方推荐使用版本RC (Release Candidate):候选版本,该版本最接近正式版Alpha和Bean:测试版,Alpha为内侧版,Bean为公测版
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。