Mysql架构

思考:Mysql需要重点学习什么:

  1. 索引:索引存储结构、索引优化......
  2. 事务:锁机制与隔离级别、日志、
  3. 集群架构

本文是对Mysql架构进行初步学习

1、Mysql链接

Mysql监听器是长连接 BIO(阻塞同步IO调用), 不是NIO.

为什么这么设计, 因为mysql影响性能的关键是磁盘IO操作而非并发

2、一个mysql查询语句执行过程

Mysql服务器

  1. Server层:涵盖Mysql大多数核心业务,以及所有内置函数。
  2. 存储引擎层:负责数据的检索存储,其架构模式是插件式的,支持InnoDB、MyISAM等多种存储引擎。从Mysql5.5.5InnoDB成为默认存储引擎,也可以在创建表的时候制定存储引擎。

Server

  1. 客户端:执行sql语句请求,比如navicat工具
  2. 查询缓存:用处不大,Mysql8.0就去掉了。 变更操作会清空缓存,同时还需要保障缓存和DB的一致性,变更操作可能比较频繁,数据一致性保障对mysql服务性能也有影响,所以用处不大。
    1. 参数query_cache_type,设置使用缓存的场景
      1. 0 (OFF)全不使用
      2. 1(ON)除了显示要求不使用缓存的,其余都走缓存
      3. 2(DEMOND) 除了显示要求使用缓存的,都不走缓存
        1. select SQL_CACHE * from user where id=1
  3. 连接器:mysql服务部署在服务器上,并开放某个端口(127.0.0.1:3306), 客户端需要和这个端口建立连接,从而实现与mysql服务器的通信。这部分由连接器完成。
    1. 客户端建立连接后,如果长时间没有动静,连接器就会将它断开。由参数wait_timeout控制,默认8小时。
    2. 项目中连接数据库一般使用线程池,这样可以复用现有的连接,而不是频繁的创建和销毁他们。
  4. 分析器:词法分析+语法分析
    1. 将sql语句中的关键字识别出来,也会识别出表名、字段名。
    2. 语法分析就是校验这个sql是否能满足sql语法的规范以及是否能正常执行。
  5. 优化器:explain 、执行计划  、成本分析 、索引选择 都是在优化器中实现
    1. 是否使用索引,使用哪个索引
    2. join语句中, 先查询哪个表(一般先查小表)问题:A join B , A的量比B多, 但是A加了限定条件后比B加了限定条件后数据量少, 这时先查哪个表?
  6. 执行器:操作引擎,返回结果
    1. 判断用户有没有表的操作权限。分析器可以做一些初步的校验,但是SQL执行过程中涉及的表可能不止字面上的表,有可能会有触发器这种在运行时才确定的过程, 分析器是不能对这种运行时才确定的表做校验

    InnoDB

    1.   Mysql默认的存储引擎,支持事务、行级锁和外键约束。
    2.   InnoDB有自己的日志系统,称作redo log(重做日志)和undo log(撤销日志)。正是因为有日志,所以才支持事务。
    3.   redo log用于保障数据库的持久性,在数据库宕机的时候可以用来恢复日志。
    4.   undo log用来支持事务的原子性和多版本并发控制(MVCC), 可用于在事务需要回滚的时候撤销sql的执行。

    2、一个mysql更新语句执行过程

            sql执行时如果每次更新都写磁盘, IO成本很高。先写内存日志再写磁盘(预写式日志) 称作WAL技术(Write-Ahead-Logging)

            更新与查询流程不一样,更新语句涉及到两个重要日志, redo log(重做日志) binlog(归档日志)

    1. redo log是InnoDb引擎带来的。是物理日志,记录的是“在某个数据页修改了什么”。 内存空间有限,循环写, 写满时就写回磁盘。
    2. binlog是mysql Server自带的。是逻辑日志,记录的这个语句的原始逻辑。追加写,不会覆盖之前的内容。

    根据这两个日志,再分析update的执行过程:

    (update T set c = c+1 where id = 2;)

    1. 写redolog和binlog是两个独立的过程, 应该要保障其事务性。Mysql内部使用两阶段提交,保障两份日志的一致性。
    2. redo log buffer : 是一块内存,commit之前的多条sql语句对应的日志,先写入rodo log buffer,  在commit的时候才把日志真正写入redo log 文件(文件名是ib_logfile+数字)

    场景分析1: binlog写完, redolog还没commit时crash, 崩溃恢复的时候Mysql怎么处理?

    答:事务可以被提交

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如若转载,请注明出处:http://www.pswp.cn/news/912192.shtml
    繁体地址,请注明出处:http://hk.pswp.cn/news/912192.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    使用deepseek制作“喝什么奶茶”随机抽签小网页

    教程很简单,如下操作 1. 新建文本文档,命名为奶茶.txt 2. 打开deepseek,发送下面这段提示词:用html5帮我生成一个喝什么奶茶的网页,点击按钮随机生成奶茶品牌等,包括喜茶等众多常见的奶茶品牌如果不满意还…

    WOE值:风险建模中的“证据权重”量化术——从似然比理论到FICO评分卡实践

    WOE值(Weight of Evidence,证据权重) 是信用评分和风险建模中用于量化特征分箱对目标变量的预测能力的核心指标。 本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关…

    js递归性能优化

    JavaScript 递归性能优化 递归是编程中强大的技术,但在 JavaScript 中如果不注意优化可能会导致性能问题甚至栈溢出。以下是几种优化递归性能的方法: 1. 尾调用优化 (Tail Call Optimization, TCO) ES6 引入了尾调用优化,但只在严格模式下…

    vue界面增加自定义水印 js

    vue整个界面增加自定义水印 需求:领导想要增加自定义水印 好不容易调完,还是想记录一下,在.vue界面编写 export default {mounted() {this.$nextTick(() > {this.addWatermark()})},methods: {// 关键:添加水印// 动态添加水印addWaterm…

    Go开发工程师-Golang基础知识篇

    开篇 我们尝试从2个方面来进行介绍: 1. 社招实际面试问题 2. 问题涉及的基础点梳理 社招面试题 米哈游 1. Go 里面使用 Map 时应注意问题和数据结构 2. Map 扩容是怎么做的? 3. Map 的 panic 能被 recover 掉吗?了解 panic 和 recover …

    能否仅用两台服务器实现集群的高可用性??

    我们将问题分为两部分来回答:一是使用 Redis 或 Hazelcast 确保数据一致性后是否仍需 Oracle 或 MySQL 等数据库;二是能否仅用两台服务器实现集群的高可用性。以下是详细探讨: 1. 使用 Redis 或 Hazelcast 确保数据一致性后,还需要…

    spring-ai-alibaba DashScopeCloudStore自动装配问题

    问题 在学习spring-ai-alibaba时,发现1.0.0.2版本在自动装配DashScopeCloudStore时,会报如下错误: Field dashScopeCloudStore in com.example.spring_ai_alibaba_examples.examples.SpringAiAlibabaExample01 required a bean of type com…

    docker-compose部署nacos

    1、docker-compose内容 高版本的nacos使用docker启动,需要将所有的端口放开,仅仅开放8848端口,spring-boot客户端获取nacos配置的时候,可能取到的内容为空。 version: 3# 定义自定义网络,确保服务间通信和外部访问 ne…

    CSRF 与 SSRF 的关联与区别

    CSRF 与 SSRF 的关联与区别 区别 特性CSRF (跨站请求伪造)SSRF (服务器端请求伪造)攻击方向客户端 → 目标网站服务器 → 内部/外部资源攻击目标利用用户身份执行非预期操作利用服务器访问内部资源或发起对外请求受害者已认证的用户存在漏洞的服务器利用条件用户必须已登录目…

    Payload-SDK自动升级

    Payload-SDK自动升级 前言 自动升级旨在通过无人机更新负载上的软件,包括不限于:Payload-SDK应用、配置文件等。对于文件的传输,大疆的Payload-SDK给我们提供了两种方式:使用FTP协议和使用大疆自研的DCFTP。我们实现的自动升级是…

    第五代移动通信新型调制及非正交多址传输技术研究与设计

    第五代移动通信新型调制及非正交多址传输技术研究与设计 一、新型调制技术研究与实现 1. FBMC (滤波器组多载波) 调制实现 import numpy as np import matplotlib.pyplot as plt from scipy.fft import fft, ifft, fftshift from scipy.signal import get_window

    AI 智能运维,重塑大型企业软件运维:从自动化到智能化的进阶实践​

    一、引言:企业软件运维的智能化转型浪潮​ 在数字化转型加速的背景下,大型企业软件架构日益复杂,微服务、多云环境、分布式系统的普及导致传统运维模式面临效率瓶颈。AI 技术的渗透催生了智能运维(AIOps)的落地&#x…

    Apache CXF安装详细教程(Windows)

    本章教程,主要介绍,如何在Windows上安装Apache CXF,JDK版本是使用的1.8. 一、下载Apache CXF Apache CXF(Apache Celtix Fireworks)是一个开源的 Web 服务框架,用于 构建和开发服务端与客户端的 Web 服务应用程序。它支持多种 Web 服务标准,尤其是 SOAP(基于 XML 的协议…

    逆向入门(22)程序逆向篇-TraceMe

    界面看起来很普通 也没有壳,直接搜索字符串找到关键代码处 但是发现这些都是赋值,并没有实现跳转相关的函数。这里通过给弹窗函数下断点,追一下返回函数来找触发点。 再次点击check,触发断点,接着按ctrlF9返回到函数…

    中文PDF解析准确率排名

    市面上的文档解析工具种类各异,包括更适用于论文解析的,专精于表格数据提取的,针对手写体优化的,适用于技术文档的,擅长处理复杂多语言混排文档的,专门处理政府招标文档表格的,以及擅长金融类表…

    Conformal LEC:官方学习教程

    相关阅读 Conformal LEChttps://blog.csdn.net/weixin_45791458/category_12993839.html?spm1001.2014.3001.5482 本文是对Conformal Equivalence Checking User Guide中附录实验的翻译(有删改),实验文件可见安装目录Conformal/share/cfm/l…

    【Torch】nn.Embedding算法详解

    1. 定义 nn.Embedding 是 PyTorch 中的 查表式嵌入层(lookup‐table),用于将离散的整数索引(如词 ID、实体 ID、离散特征类别等)映射到一个连续的、可训练的低维向量空间。它通过维护一个形状为 (num_embeddings, emb…

    cdq 三维偏序应用 / P4169 [Violet] 天使玩偶/SJY摆棋子

    最近学了 cdq 分治想来做做这道题,结果被有些毒瘤的代码恶心到了。 /ll 题目大意:一开始给定一些平面中的点。然后给定一些修改和询问: 修改:增加一个点。询问:给定一个点,求离这个点最近(定义…

    System.Threading.Tasks 库简介

    System.Threading.Tasks 是 .NET 中任务并行库(Task Parallel Library, TPL)的核心组件,它提供了基于任务的异步编程模型,是现代 .NET 并发编程的基础。 设计原理 1. 核心目标 抽象并发工作:将并发操作抽象为"任务"概念 资源高效…

    Python爬虫实战:研究jieba相关技术

    1. 引言 1.1 研究背景与意义 随着互联网技术的飞速发展,网络新闻已成为人们获取信息的主要渠道之一。每天产生的新闻文本数据量呈爆炸式增长,如何从海量文本中高效提取有价值的信息,成为信息科学领域的重要研究课题。文本分析技术通过对文本内容的结构化处理和语义挖掘,能…