一、MySQL逻辑架构
- 最上层的服务并不是MySQL所独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。比如连接处理、授权认证、安全等等。
- 第二层架构集中了MySQL的核心功能,包括查询解析、分析、优化、缓存以及所有的内置函数(如日期、时间、数据和加密函数),所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。
- 第三层包含了存储引擎。存储引擎负责Mysql中数据的存储和提取。服务器通过API与存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明。但存储引擎不会去解析SQL,不同存储引擎之间也不会相互通讯,而只是简单的响应上层服务器的请求。
1、连接管理和安全性
每个客户端连接都会在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU核心或者CPU中运行。服务器会负责缓存线程,因此不需要为每一个新建的连接创建或者销毁线程。
当客户端连接到Mysql服务器时,服务器需要对其进行认证。认证基于用户名、原始主机信息和密码(mysql.user表)。如果使用了安全套接字(SSL)的方式连接,还可以使用X.509证书认证。一旦客户端连接成功,服务器会继续验证该客户端是否具有执行某个特定查询的权限。
2、优化与执行
mysql会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询、决定表的读取顺序,以及选择合适的索引等。用户可以通过特殊的关键字提示(hint)优化器,影响它的决策过程。也可以请求优化器解析(explain)优化过程的各个因素,使用户可以知道服务器是如果进行优化决策的,便于用户重构查询和schema、修改相关配置。
优化器并不关心表使用的是什么存储引擎,但存储引擎对于优化查询是有影响的。优化器会请求存储引擎提供容量或某个具体操作的开销信息,以及表数据的统计信息等。
对于select语句,在解析查询之前,服务器会先检查查询缓存(query cache),如果能够在其中找到对应的查询,服务器就不必在执行查询解析、优化和执行的整个过程,而是直接返回查询缓存中的结果集。
3、并发控制
无论何时,只要有多个查询需要在同一时刻修改数据,都会产生并发控制的问题,mysql在两个层面进行并发控制:服务器层和存储引擎层。
①读写锁:分别是读锁和写锁,也成为共享锁和排它锁。读锁是共享的,多个客户在同一时刻可以同时读取同一个资源,而相互不干扰;写锁是排他的,也就是说一个写锁阻塞其他的写锁和读锁,这是出于安全策略考虑,只有这样,才能确保在给定的时间内,只有一个用户能执行写入,并防止其他用户读取正在写入的同一资源。
②锁的力度:每种mysql存储引擎都可以实现自己的所策略和锁力度。在存储引擎的设计中,锁管理是个非常重要的决定。有两种非常重要的所策略---(1)表锁,他会锁定整张表。尽管存储引擎可以管理自己的锁,mysql本身还是会使用各种有效的锁来实现不同的目的,例如服务器会为诸如alter table使用表锁,而忽略存储引擎的锁机制;(2)行级锁,可以最大程度的支持并发处理,在Innodb以及其他的额一些存储引擎中实现了行级锁。行级锁只在存储引擎层实现,而mysql服务器层没有实现。
4、事务
事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎可以成功执行该组全部语句,那么就执行该组语句。如果其中有任何一条语句不能执行,那么所有的语句都不会执行。也就是说,事务内的语句要么全部执行成功,要么全部执行失败。事务要求系统有严格的ACID。
5、多版本并发控制
mysql大多数事务存储引擎实现的都不是简单的行级锁,基于提升并发性能的考虑,他们一般都会实现多版本并发控制(MVCC)。MVCC是通过保存数据在某个时间点的快照来实现的,根据不同的实现,分为乐观并发控制和悲观并发控制。
Innodb的mvcc,是通过在每行记录后面保存两个隐藏的列来实现的。这两个列,一个保存了行的创建时间,一个保存行的过期时间(或删除时间)。当然存储的并不是实际的时间值,而是系统版本号。每开始一个新的事务,系统版本号都会自动递增。事务开始时刻的系统版本号会作为事务的版本号,用来和查询到的每行记录的版本号进行比较。
6、mysql的存储引擎
①InnoDB是mysql的默认事务型引擎,它被设计用来处理大量的短期事务,短期事务大部分情况是正常提交的,很少会被回滚。InnoDB的性能和自动崩溃恢复特性,使得他在非事务型存储的需求中也很流行。除非有特殊需要,否则就优先考虑InnoDB引擎。
②在mysql5.1之前的版本,MyISAM是默认的存储引擎。MyISAM提供了大量的特性,包括全文索引、压缩、空间函数等。但MyISAM不支持事务和行级锁,而且有一个毫无疑问的缺陷就是崩溃后无法安全恢复。但对于只读的数据,或者表比较小、可以容忍修复操作,则依然可以继续使用MyISAM。
③memory引擎,如果需要快速访问数据,并且这些数据不会被修改,重启以后丢失也没有关系,那么使用memory表是非常有用的。memory表至少比MyISAM表要快一个数量级,因为数据都保存在内存中,不需要进行磁盘I/O。memory表的结构在重启以后还会保留,但数据会丢失。
相关推荐
《精通PHP 4.0与MySQL架构Web数据库》是一本专为PHP初学者和进阶者设计的教程,旨在帮助读者全面掌握使用PHP 4.0版本与MySQL数据库构建高效、安全的Web应用。该书可能包含了从基础的PHP语法到复杂的数据库交互,以及...
在探讨大规模MySQL架构时,我们不得不提到Google的高级架构师Jeremy Cole。Jeremy Cole拥有超过14年的MySQL社区经验,并在MySQL AB公司工作过四年。他的分享是基于大量的实践经验,而非学术研究,因此其中涉及的内容...
基于SSM+mysql架构实现的在线购房项目 基于SSM+mysql架构实现的在线购房项目 基于SSM+mysql架构实现的在线购房项目 基于SSM+mysql架构实现的在线购房项目 基于SSM+mysql架构实现的在线购房项目 基于SSM+mysql架构...
基于SSM+mysql架构搭建的客户管理系统源码 基于SSM+mysql架构搭建的客户管理系统源码 基于SSM+mysql架构搭建的客户管理系统源码 基于SSM+mysql架构搭建的客户管理系统源码 基于SSM+mysql架构搭建的客户管理系统源码 ...
MySQL架构执行与SQL性能优化-MySQL高并发详解课程,课程的目标简单明确,核心就是MySQL的性能优化与高并发。课程内容进行了精华的浓缩,有四大内容主旨,MySQL架构与执行流程,MySQL索引原理详解,MySQL事务原理与...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,...基于SpringBoot+MyBatis+MySQL架构的图书借阅管理系统源码.zip
MySQL 架构与 SQL 执行流程深入浅出 MySQL 架构与 SQL 执行流程是 MySQL 数据库的核心组件,它们之间的交互关系决定了 MySQL 数据库的性能和可靠性。本篇文章将深入浅出 MySQL 架构和 SQL 执行流程,帮助读者更好...
lvs+keepalived+mha+mysql 架构配置说明 LVS(Linux Virtual Server)是一种开源的负载均衡解决方案,旨在提高服务器集群的可用性和可扩展性。在高可用架构中,LVS 通常与 Keepalived 配合使用,以提供高可用的负载...
MySQL 架构与内部模块的学习是理解数据库工作原理的...总之,理解MySQL架构与内部模块对于优化数据库性能、编写高效的SQL语句和解决系统问题至关重要。深入学习这些知识将有助于提升数据库管理员和开发人员的工作效率。
mysql架构思维导图
本课程“探究MySQL架构设计实战宝典”旨在深入解析MySQL的内部机制和高级特性,帮助开发者和数据库管理员提升对MySQL架构设计的理解与实践能力。 1. **MySQL架构概述** MySQL采用了客户端-服务器架构,包括前端...
在JSP-MySQL架构中,这部分通常由Java Servlet或JavaBeans(JDBC)实现。Servlet是服务器端的Java应用程序,用于处理来自客户端(这里是JSP页面)的请求,执行必要的业务逻辑,并返回响应。业务逻辑层对数据进行验证...
### MySQL架构演变与性能优化知识点解析 #### 一、MySQL架构概述 MySQL作为一个关系型数据库管理系统,其架构设计经历了多次迭代和发展。理解MySQL的基本架构对于深入掌握其工作原理至关重要。 **1.1 MySQL架构图...