MySQL 实战 45 讲 笔记 ----来源《极客时间》

01 | 基础架构:一条SQL查询语句是如何执行的?

1. MySQL 可以分为 Server层 和 存储引擎层 两部分。Server 层包括连接器、查询缓存、分析器、优化器、执行器等。存储引擎层支持 InnoDB、MyISAM等.

(1) 连接器:管理连接,权限认证。

(2) 查询缓存:命中则直接返回结果。

(3) 分析器:词法分析,语法分析。

(4) 优化器:生成执行计划,选择索引。

(5) 执行器:操作引擎,返回结果。

(6) 存储引擎:存储数据,提供读写接口。

2. 临时内存累积问题: 在执行过程中临时使用的内存会保留在连接对象里面,在连接断开的时候才释放。所以长连接累积下来,会导致内存占用太大,被系统强行杀掉(OOM)。

    解决办法:可以执行 mysql_reset_connection 来重新初始化连接资源,释放内存。而且它不需要重连和重做权限验证。

3. 查询缓存往往弊大于利,MySQL 8.0 版本将查询缓存的功能删掉了。

02 | 日志系统:一条SQL更新语句是如何执行的?

1. MySQL 最重要的两个日志:物理日志 redo log 和逻辑日志 binlog。

2. redo log 相关:

(1) 作用:避免每一次update语句都需要查找磁盘,降低 IO 成本。

(2) 简述:处理update语句时,不查找对应的记录去写入,而是把数据写进内存和日志,并把日志本身持久化到磁盘。之后空闲了再把日志对应的数据同步到磁盘。

(3) WAL 技术,关键点就是先写日志,再写磁盘。 应用于 redo log。

(4) redo log写入方式:环形方式,先从头开始写,写到末尾就又回到开头循环写。

(5) redo log的数据是写入磁盘的,所以可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe。

2. binlog 相关:

(1) 作用:记录原始的SQL语句,用于数据恢复操作。

3. redo log 和 binlog 的区别:

(1) redo log 是为了降低IO成本;binlog 是为了可以恢复数据。

(2) redo log 是 属于SQL的存储引擎层(InnoDB )的;binlog 是属于 MySQL 的 Server 层的。

(3) redo log 记录的是“在某个数据页上做了什么修改”;binlog 记录的是这个语句的原始逻辑。

(4) redo log 是循环写的,空间用完后会擦除数据;binlog 是追加写入的,并不会擦除以前的日志。

4. update 语句基于redo log和binlog相关的内部流程:

(1) 在内存查找相关数据,不在内存的话就从硬盘读取。

(2) 根据update语句,在内存中修改数据。

(3) 把操作记录写入到 redo log 里。redo log 设置为 prepare 状态。

(4) 生成这个操作的 binlog,并把 binlog 写入磁盘。

(5) 把redo log 设置成commit状态。

(6) 如果在上面(4)(5)步骤时出现了系统挂掉的情况,那么在系统重启时,会接着做完(4)(5)步骤。

作用:上面的“两阶段提交模式”,保证了任何情况下,redo log 和 binlog都是同步一致的

03 | 事务隔离:为什么你改了我还看不见?

1. 事务是在MySQL的引擎层实现的。原生的 MyISAM 引擎不支持事务,是 MyISAM 被 InnoDB 取代的重要原因之一。

2. 有多个事务同时执行的时候,可能出现脏读、幻读的问题。SQL通过 “隔离级别”的概念,来解决这些问题。

3. SQL 标准的事务隔离级别包括:读未提交读提交可重复读 串行化

(1) 读未提交:一个事务 还没提交,它做的变更,在别的事务里 已经生效

(2) 读提交:一个事务 提交之后,它做的变更,在别的事务里 才生效

(3) 可重复读:一个事务执行过程中看到的数据,与事务在启动时的数据是一致的。未提交的变更,对其他事务是不生效的。

(4) 串行化:对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。后访问的事务必须等前一个事务执行完成,才能继续执行。

4.  在实现上,数据库里会创建一个视图,访问时以视图的结果为准。

(1) 读未提交:没有视图概念,直接返回记录上的最新值。

(2) 读提交是指:视图是在每个 SQL 语句开始执行时创建的。

(3) 可重复读是指:视图在事务启动时创建,整个事务存在期间都用这个视图。

(4) 串行化:没有视图概念,用加锁的方式来避免并行访问。

5. MySql的事务隔离级别是可重复读,Oracle是读提交。做数据迁移时要注意修改。

6. 事务隔离的实现:每条记录在更新的时候,都会同时记录一条回滚操作。通过这些回滚操作,可以得到前一个状态的值。也就可以获得各个隔离级别状态下的值。

7. 回滚日志带来的问题:当没有事务再需要用到这些回滚日志时,回滚日志才会被删除。时间很长的事务,会导致大量占用存储空间。应尽量避免使用长事务

8. 建议通过显式语句来启动事务(begin 或 start transaction),具体是使用 set autocommit=1。

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

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

相关文章

nextjs+supabase vercel部署失败

1.不能含有<any> 改成unknown或者增加类(如图) 2.检查vecel是否配置环境变量&#xff08;即supabase的url和anon-key&#xff09;

数据库Mysql_联合查询

或许自己的不完美才是最完美的地方&#xff0c;那些让自己感到不安的瑕疵&#xff0c;最终都会变成自己的特色。 ----------陳長生. 1.介绍 1.1.为什么要进行联合查询 在数据设计的时候&#xff0c;由于范式的需求&#xff0c;会被分为多个表&#xff0c;但是当我们要查询数据…

(37)VTK C++开发示例 ---纹理地球

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;VTK开发 &#x1f448; 1. 概述 将图片纹理贴到球体上&#xff0c;实现3D地球的效果。 该代码使用了 VTK (Visualization Toolkit) 库来创建一个纹理…

VMware-centOS7安装redis分布式集群

1.部署redis包 1.1 在usr/local文件夹里创建文件夹 mkdir software 1.2 进入文件夹 cd /usr/local/software/ 下载redis wget http://download.redis.io/releases/redis-6.2.6.tar.gz解压 tar zxvf redis-6.2.6.tar.gz重命名文件夹 mv redis-6.2.6 redis安装gcc编译器 yum i…

【RocketMQ Broker 相关源码】- broker 启动源码(2)

文章目录 1. 前言2. 创建 DefaultMessageStore3. DefaultMessageStore#load3.1 CommitLog#load3.2 loadConsumeQueue 加载 ConsumeQueue 文件3.3 创建 StoreCheckpoint3.4 indexService.load 加载 IndexFile 文件3.5 recover 文件恢复3.6 延时消息服务加载 4. registerProcesso…

认识含盐褶皱和冲断带中的前造山运动蒸发岩变形

主要观察结果的示意图模型&#xff0c;并提出了三叠纪前造山蒸发岩变形的演化模型。&#xff08;a&#xff09; 蒸发岩的初始平缓隆起&#xff0c;在盐枕和盐背斜顶部有滑塌褶皱和同沉积伸展断层。&#xff08;b&#xff09; 底辟形成&#xff0c;主动刺穿和拖动折叠长底辟&…

数据库MySQL学习——day8(复习与巩固基础知识)

文章目录 1. 数据库基础概念复习2. 常用SQL命令复习2.1 SELECT 查询数据2.2 INSERT 插入数据2.3 UPDATE 更新数据2.4 DELETE 删除数据 3. 表操作复习3.1 创建表3.2 修改表3.3 删除表 4. 实践任务4.1 创建样例数据库和表4.2 插入和更新数据4.3 使用WHERE、ORDER BY、LIMIT进行查…

TS 字面量类型

str是string类型l str2是常量&#xff0c;类型是字面量类型 用途&#xff1a;配合联合类型确定更严谨精确的可选值利恩

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】1.3 客户端工具选择(psql/PGAdmin/DBeaver)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 1.3 客户端工具选择(psql/PGAdmin/DBeaver)1.3.1 工具定位与适用场景1.3.2 深度解析三大工具1.3.2.1 psql:命令行的终极掌控核心特性基础操作示例优缺点分析1.3.2.2 PGAdmin:PostgreSQL 专属管理平台…

2023年第十四届蓝桥杯省赛B组Java题解【 简洁易懂】

2023年第十四届蓝桥杯省赛B组Java 题解 比赛整体情况说明 第十四届蓝桥杯大赛省赛B组Java赛道共有10道题目&#xff0c;题型分布如下&#xff1a; 题目类型题量难度分布考察重点结果填空题53简单 2中等基础算法、数学逻辑、字符串处理编程大题52中等 3困难动态规划、图论、…

深度学习中的数据增强:提升食物图像分类模型性能的关键策略

深度学习中的数据增强&#xff1a;提升食物图像分类模型性能的关键策略 在深度学习领域&#xff0c;数据是模型训练的基石&#xff0c;数据的数量和质量直接影响着模型的性能表现。然而&#xff0c;在实际项目中&#xff0c;获取大量高质量的数据往往面临诸多困难&#xff0c;…

jakarta.mail(javax.mail)包中关于SMTP协议支持的属性参数配置

一、程序属性配置 NO.NameTypeDescription1mail.smtp.userStringSMTP的默认用户名。2mail.smtp.hostString要连接的SMTP服务器。3mail.smtp.portint如果 connect()方法未明确指定一个&#xff0c;则要连接的SMTP服务器端口。默认为25。4mail.smtp.connectiontimeoutint套接字连…

《解锁SCSS算术运算:构建灵动样式的奥秘》

SCSS作为CSS预处理器&#xff0c;算术运算功能犹如一颗璀璨明珠&#xff0c;赋予我们动态计算样式属性值的强大能力&#xff0c;让网页样式不再是一成不变的刻板呈现&#xff0c;而是能够根据各种条件和需求灵动变化。 在SCSS的世界里&#xff0c;算术运算绝非孤立的存在&…

Java 入门篇

文章目录 一、注释1、单行注释2、多行注释3、文档注释 二、字面量注意 三、变量四、标识符 一、注释 1、单行注释 // 同 C992、多行注释 /* 同 C89和 C99 等 */3、文档注释 /** 文档注释&#xff0c;其内容是可以提取到一个程序说明文档中去的*/二、字面量 同 C 常量 注意…

PowerShell安装Chocolatey

文章目录 环境背景安装参考 环境 Windows 11 专业版PowerShell 7.5.1.NET Framework 4.0Chocolatey v2.4.3 背景 Chocolatey是Windows上的包管理工具&#xff0c;有点类似于Linux的 yum 和 apt 命令。比如&#xff0c;PowerShell里默认没有 grep 命令&#xff0c;则可以通过…

将Airtable导入NocoDB

将Airtable导入NocoDB 0. 前提条件1. 详细步骤 NocoDB提供了一种简化流程&#xff0c;可在几分钟内将您的Airtable数据库无缝转移到各种数据库管理系统&#xff0c;包括MySQL、Postgres和SQLite。此功能特别适合希望将Airtable数据库迁移到更强大且可扩展的数据库管理系统中的用…

微软发布了最新的开源推理模型套件“Phi-4-Reasoning

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Elasticsearch入门速通01:核心概念与选型指南

一、Elasticsearch 是什么&#xff1f; 一句话定义&#xff1a; 开源分布式搜索引擎&#xff0c;擅长处理海量数据的实时存储、搜索与分析&#xff0c;是ELK技术栈&#xff08;ElasticsearchKibanaBeatsLogstash&#xff09;的核心组件。 核心能力&#xff1a; 近实时搜索&…

【angular19】入门基础教程(三):关于angular里面的响应式数据入门使用

三个框架&#xff0c;都有响应式数据的概念。在angular里面有专门的叫法&#xff0c;响应式数据叫信号,英文名signal。其他两个框架式没有专门的名字的&#xff0c;统称为动态数据。这点可以说&#xff0c;angular还是太细了&#xff0c;细节值得点赞&#xff01;&#xff01; …

GitHub Actions 和 GitLab CI/CD 流水线设计

以下是关于 GitHub Actions 和 GitLab CI/CD 流水线设计 的基本知识总结: 一、核心概念对比 维度GitHub ActionsGitLab CI/CD配置方式YAML 文件(.github/workflows/*.yml).gitlab-ci.yml执行环境GitHub 托管 Runner / 自托管GitLab 共享 Runner / 自托管市场生态Actions Mar…