MySQL之体系结构
华子目录
- MySQL简介
- MySQL的特性
- MySQL版本
- MySQL常见版本
- 数据库排名网站
- MySQL结构体系
- 查看最大连接数
- 查询缓存配置情况
- 一条SQL语句执行流程
MySQL简介
- MySQL是一个小型关系数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被sun公司10亿美金收购。2009年,SUN又被Oracle以74亿美金收购。
- 目前MySQL被广泛地应用在Internet上的中小型网站中。由于体积小、速度快、总体拥有成本低,尤其是开放源代码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
MySQL的特性
- 1.使用C和C++ 编写,并使用了多种编译器进行测试,保证源代码的可移植性。
- 2.支持 AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多种操作系统。
- 3.为多种编程语言提供了API。这些编程语言包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
- 4.支持多线程,充分利用CPU资源,支持多用户。
- 5.优化的SQL查询算法,有效地提高查询速度。
- 6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
- 7.提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
- 8.提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
- 9.提供用于管理、检查、优化数据库操作的管理工具。
- 10.可以处理拥有上千万条记录的大型数据库。
MySQL版本
- 1.Alpha版:开发版,公司内部使用
- 2.Beta版:完成开发后,用户体验版
- 3.RC版:生产环境发布之前的一个小版本或称候选版
- 4.GA版:正式发布版本
MySQL常见版本
- MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。
- MySQL Enterprise Edition 企业版本,需付费,可以试用 30 天。
- MySQL Cluster 集群版,开源免费。可将几个 MySQL Server 封装成一个 Server。
- MySQL Cluster CGE 高级集群版,需付费
数据库排名网站
http://db-engines.com/en/ranking
MySQL结构体系
- Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的。
- Connectors指的是不同语言中与SQL的交互。
- Management Serveices & Utilities: 系统管理和控制工具。
- Connection Pool:连接池。管理缓冲用户连接,线程处理等需要缓存的需求。
- SQL Interface:SQL接口,接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface。
- Parser: 解析器。SQL命令传递到解析器的时候会被解析器验证和解析。
- Optimizer:查询优化器。SQL语句在查询之前会使用查询优化器对查询进行优化。
- Cache和Buffer: 查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
- Engine:存储引擎。存储引擎是MySql中具体的与文件打交道的子系统。
查看最大连接数
mysql> show variables like '%max_connections%';
查询缓存配置情况
mysql> show variables like '%query_cache%';
MySQL 是一个开源的关系型数据库管理系统(RDBMS),它采用了典型的客户端-服务器体系结构。以下是 MySQL 的基本体系结构:
1. 客户端层(Client Layer):
- 客户端层是与用户交互的部分,用户通过客户端连接到 MySQL 服务器,并发送查询和命令。
- 客户端可以是各种类型的应用程序,例如命令行工具、图形用户界面(GUI)、Web 应用程序等。
- 客户端与服务器之间通过网络连接进行通信,通常使用标准的 MySQL 协议进行数据交换。
2. 连接池管理器(Connection Pool Manager):
- 连接池管理器负责管理客户端与服务器之间的连接。
- 它处理连接的创建、维护和回收,以确保高效地使用服务器资源并提高性能。
3. 解析器(Parser):
- 解析器负责解析客户端发送的 SQL 查询和命令,并将其转换为内部数据结构以供后续处理。
- 解析器还执行语法和语义分析,以确保查询和命令的正确性。
4. 优化器(Optimizer):
- 优化器负责对解析后的查询进行优化,以提高执行效率。
- 它使用各种优化技术和算法,例如查询重写、索引选择、连接重排序等,以生成执行效率更高的查询计划。
5. 查询缓存(Query Cache)(部分版本中不再使用):
- 查询缓存存储已经执行过的查询结果,以提高相同查询的执行速度。
- 当客户端发送一个查询时,MySQL 首先检查查询缓存,如果找到了相同的查询,则直接返回缓存的结果,而不需要执行实际的查询操作。
6. 存储引擎层(Storage Engine Layer):
- 存储引擎层负责管理数据的存储和检索,它实现了 MySQL 的各种存储引擎(例如 InnoDB、MyISAM 等)。
- 不同的存储引擎提供了不同的特性、性能和适用场景,用户可以根据需求选择合适的存储引擎。
7. 锁管理器(Lock Manager):
- 锁管理器负责管理数据库中的锁,以确保事务的并发控制和数据一致性。
- 它处理锁的申请、释放和冲突解决,以避免数据的并发访问导致的问题。
8. 日志管理器(Log Manager):
- 日志管理器负责管理数据库的事务日志,以实现事务的持久性和恢复能力。
- 它记录所有的数据修改操作,包括事务的提交和回滚,以便在数据库发生故障时进行恢复。
9. 缓冲池(Buffer Pool):
- 缓冲池是内存中的一个区域,用于缓存数据库的数据和索引页,以提高数据访问的速度。
- 它充当了内存和磁盘之间的缓冲,减少了频繁的磁盘 I/O 操作,从而提高了数据库的性能。
10. 磁盘管理器(Disk Manager):
- 磁盘管理器负责管理数据库在磁盘上的存储结构,包括数据文件、日志文件、索引文件等。
- 它处理数据的读写操作,并管理磁盘空间的分配和释放。
这些组件共同构成了 MySQL 的体系结构,实现了数据库管理系统的各种功能,包括数据存储、查询处理、事务管理、并发控制、日志记录、缓存管理等。
一条SQL语句执行流程
连接层
(1)提供连接协议:TCP/IP 、SOCKET
(2)提供验证:用户、密码,IP,SOCKET
(3)提供专用连接线程:接收用户SQL,返回结果
通过以下语句可以查看到连接线程基本情况
mysql> show processlist;
SQL层
(1)接收上层传送的SQL语句
(2)语法验证模块:验证语句语法,是否满足SQL_MODE
(3)语义检查:判断SQL语句的类型
DDL :数据定义语言
DCL :数据控制语言
DML :数据操作语言
DQL: 数据查询语言
...
(4)权限检查:用户对库表有没有权限
(5)解析器:对语句执行前,进行预处理,生成解析树(执行计划),说白了就是生成多种执行方案.
(6)优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划
代价模型:资源(CPU IO MEM)的耗损评估性能好坏
(7)执行器:根据最优执行计划,执行SQL语句,产生执行结果
执行结果:在磁盘的xxxx位置上
(8)提供查询缓存(默认是没开启的),会使用redis tair替代查询缓存功能
(9)提供日志记录(日志管理章节):binlog,默认是没开启的。
存储引擎层(类似于Linux中的文件系统)
负责根据SQL层执行的结果,从磁盘上拿数据。
将16进制的磁盘数据,交由SQL结构化化成表,
连接层的专用线程返回给用户。
一条 SQL 语句在 MySQL 中的执行流程通常包括以下步骤:
1. **客户端发送 SQL 查询**:
客户端通过网络连接发送 SQL 查询到 MySQL 服务器。
2. **连接建立**:
MySQL 服务器接收到客户端发送的 SQL 查询,并建立与客户端的连接。
3. **解析器解析 SQL 查询**:
MySQL 服务器中的解析器解析客户端发送的 SQL 查询,分析语法和语义,并将其转换为内部的执行计划。
4. **优化器优化执行计划**:
优化器对解析后的 SQL 查询进行优化,选择最佳的执行计划以提高执行效率。
5. **存储引擎执行查询**:
MySQL 服务器根据优化后的执行计划,调用相应的存储引擎执行查询操作。
6. **锁管理器处理并发访问**:
如果查询涉及到数据的读写操作,锁管理器负责处理并发访问,确保事务的隔离性和一致性。
7. **数据读取或修改**:
存储引擎根据执行计划从磁盘或缓存中读取数据,或者进行数据的修改操作。
8. **日志管理器记录事务日志**:
如果查询涉及到事务的修改操作,日志管理器负责记录事务日志,以实现事务的持久性和恢复能力。
9. **返回结果给客户端**:
存储引擎将查询结果返回给 MySQL 服务器,MySQL 服务器再将结果返回给客户端。
10. **连接关闭**:
客户端完成对查询结果的处理后,关闭与 MySQL 服务器的连接。
这是一条 SQL 查询在 MySQL 中的基本执行流程。在执行过程中,MySQL 会根据查询的具体情况进行优化和调整,以提高执行效率和性能。