Mysql数据库(3)—架构和日志

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql数据库(3)—架构和日志

Mysql的架构设计

Mysql分为Server层和存储引擎层:

Server层

主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

存储引擎层

存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在最常用的存储引擎是 InnoDB,它从 MySQL 5.5.5 版本开始成为了默认存储引擎。也就是说如果我们在create table时不指定表的存储引擎类型,默认会给你设置存储引擎为InnoDB。

server层的执行过程:

连接器

首先连接器会判断该用户提交的SQL是否有权限,如果有权限才会进行后续的执行操作,连接器负责跟客户端建立连接、获取权限、维持和管理连接。

查询缓存

对于有相同查询条件的请求会在查询缓存中判断是否有之前请求的缓存结果。之前执行过的语句及其结果可能会以 key-value 对的形式,被直接缓存在内存中。key 是查询的语句,value 是查询的结果。如果你的查询能够直接在这个缓存中找到 key,那么这个 value 就会被直接返回给客户端。如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查询缓存中。可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。

分析器

如果本次请求没有缓存命中,在分析器中用以进行词法和语法的分析,如果不符合规范则会抛出异常。

优化器

词法语法分析正常的话会进行优化器处理,在这个阶段会进过成本代价分析后,选择合适的索引。

执行器

最后调用选择的存储引擎来进行数据的查询和更新等操作。

1A6E0539-12D2-4D04-B0BE-0038BCFED8DF

InnoDB存储引擎的执行过程

  1. 执行一句SQL,先从考虑从内存中的buffer pool加载所需的记录数据,如果buffer pool没有相关数据,就会从磁盘中将包含该记录的页加载到buffer pool中来;
  2. 在buffer pool中将记录旧值写到undo log中,undo log是InnoDB存储引擎特有的日志类型,防止SQL执行失败需要回滚数据,如果失败直接从undo log中恢复即可;
  3. 在buffer pool中将旧值更新为新值,并将新值写入到redo log中,undo log也是InnoDB存储引擎特有的日志类型,防止SQL执行的结果还没有刷盘到磁盘中数据库服务crash掉,如果这样可以从undo log中重做;
  4. 将SQL执行的操作信息写入到binlog中,binlog按时刷盘写入到磁盘中,binlog是server层的机制,任何存储引擎都存在的机制;
  5. SQL执行完成;

undo log和redo log

  1. redo log是重做日志。保存的是一个事务T在进行X操作后的新值N,可以表示为:,是innodb存储引擎特有的,支持crash之后恢复没有刷盘的数据恢复。
  2. undo log是回退日志。保存的是一个事务T在进行Y操作后的老值O,可以表示为:,是innodb存储引擎特有的,支持事务失败后进行事务回滚。

binlog

  1. bin日志是mysql运行的日志,里面记录了mysql运行的操作,他是在server层实现的日志。保存的是逻辑日志,即保存的是sql语句,通过bin 日志做数据恢复。也可以保存实际的数据格式。

buffer pool

mysql执行一句更新操作的数据不会立即写入磁盘,会先放到buffer pool中,这是内存中的一片暂存区,等一段时间会刷入磁盘中。这样设计的作用是提高读写数据的效率。

WAL机制

WAL是先写日志再进行刷盘操作,就是会先将操作写入到redo log+binlog中,再将buffer pool中数据刷入磁盘;这样做的优势是:(1)保障数据不会丢失。及时数据服务crash,也能从redo log中进行恢复;(2)由于刷盘操作是顺序操作,相对于随机写的效率会高很多;(3)实际修改先写入buffer pool中,等内存满了在刷盘,这样明显降低了IO次数,提升了IO效率。


参考资料:

MySQL的内部组件结构:https://note.youdao.com/ynoteshare/index.html?id=f030268c54f18d2116837f8f3ef045bf&type=note&_time=1693637410183

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
23天前
|
存储 调度 C++
16 倍性能提升,成本降低 98%! 解读 SLS 向量索引架构升级改造
大规模数据如何进行语义检索? 当前 SLS 已经支持一站式的语义检索功能,能够用于 RAG、Memory、语义聚类、多模态数据等各种场景的应用。本文分享了 SLS 在语义检索功能上,对模型推理和部署、构建流水线等流程的优化,最终带给用户更高性能和更低成本的针对大规模数据的语义索引功能。
168 17
|
6月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
1月前
|
SQL 存储 监控
SQL日志优化策略:提升数据库日志记录效率
通过以上方法结合起来运行调整方案, 可以显著地提升SQL环境下面向各种搜索引擎服务平台所需要满足标准条件下之数据库登记作业流程综合表现; 同时还能确保系统稳健运行并满越用户体验预期目标.
139 6
|
2月前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
96 6
|
2月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
469 5
|
3月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL数据库的WAL日志与数据写入的过程
PostgreSQL中的WAL(预写日志)是保证数据完整性的关键技术。在数据修改前,系统会先将日志写入WAL,确保宕机时可通过日志恢复数据。它减少了磁盘I/O,提升了性能,并支持手动切换日志文件。WAL文件默认存储在pg_wal目录下,采用16进制命名规则。此外,PostgreSQL提供pg_waldump工具解析日志内容。
265 0
|
5月前
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
|
6月前
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
269 23
|
7月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
7月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构

热门文章

最新文章

推荐镜像

更多