1. MySQL架构
Posted yvhqbat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1. MySQL架构相关的知识,希望对你有一定的参考价值。
1. mysql逻辑架构
MySQL服务器逻辑架构图:
1. 最上层,大多数基于网络的客户端/服务器的工具或服务都有类似架构,比如连接处理、授权认证、安全等。
2. 第二层,大多数MySQL的核心服务功能都在这一层,包括查询解析、分析、优化、缓存以及所有的内置函数,所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。
3. 第三层,存储引擎负责MySQL中数据的存储和提取。服务器通过API与存储引擎通信,这些接口屏蔽了不同存储引擎之间的差异。
1) 连接管理与安全性
每个客户端连接都会在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行。
使用线程池(连接池),不需要为每个新建的连接创建或销毁线程。
认证基于用户名、原始主机信息和密码。
2) 优化与执行
对于SELECT语句,在解析查询之前,服务器会先检查查询缓存,如果能找到对应的查询,服务器就不必再执行查询解析、优化和执行的整个过程,而是直接返回查询缓存中的结果集。
2. 并发控制
无论何时,只要有多个查询需要在同一时刻修改数据,都会产生并发控制问题。
MySQL在两个层面进行并发控制:①服务器层;②存储引擎层。
1) 读写锁
读锁:共享的,多个客户在同一时刻可以同时读取同一资源,而互不干扰。
写锁:排他的,一个写锁会阻塞其他的写锁和读锁,确保只有一个用户能执行写入,并防止其他用户读取正在写入的同一资源。
2) 锁粒度
一种提高共享资源并发性的方式:让锁定对象更有选择性,尽量只锁定需要修改的部分数据,而不是所有的资源。
在给定的资源上,锁定的数据量越少,则系统的并发程度越高。
所以,锁策略:就是在锁的开销和数据的安全性之间寻求平衡。
MySQL中,两种最重要的锁策略:
- 表锁(table lock):MySQL中最基本的锁策略,开销 最小。锁定整张表。
- 行级锁(row lock):可以最大程度支持并发处理,同时也带来了最大的锁开销。
3. 事务
事务:一组原子性的SQL查询,事务内的语句,要么全部执行成功,要么全部执行失败。
1) 事务的ACID性质
a. 原子性(atomicity):一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚。
b. 一致性(consistency):数据库总是从一个一致性的状态转到另外一个一致性的状态。
c. 隔离性(isolation):一个事务所做的修改在最终提交前,对其他事务是不可见的。
d. 持久性(durability):一旦事务提交,则其所做的修改就会永久保存到数据库中。
一个实现了ACID的数据库,相比没有实现的数据库,通常会需要更强的CPU处理能力、更大的内存和更多的磁盘空间。
2) 事务日志
使用事务日志,可以提高事务的效率。
存储引擎在修改表的数据时只需要修改其内存拷贝,再把该修改行为记录到持久在硬盘的事务日志中,而不用每次都将修改的数据本身持久到磁盘。
事务日志采用的是追加的方式,因此,写日志的操作是磁盘上一小块区域内的顺序I/O。
事务日志持久后,内存中被修改的数据在后台可以慢慢地刷会到磁盘。
称为“预写式日志(write-ahead logging)”,修改数据需要写两次磁盘。
4. MySQL的存储引擎
InnoDB:MySQL的默认事务型引擎,也是最重要、使用最广泛的存储引擎。
MyISAM:不支持事务。
以上是关于1. MySQL架构的主要内容,如果未能解决你的问题,请参考以下文章