读高性能MySQL(第4版)笔记02_MySQL架构(下)

news2025/3/9 23:03:40

 

1. 事务日志

1.1. 事务日志有助于提高事务的效率

1.1.1. 存储引擎只需要更改内存中的数据副本,而不用每次修改磁盘中的表,这会非常快

1.1.2. 更改的记录写入事务日志中,事务日志会被持久化保存在硬盘上

1.2. 事务日志采用的是追加写操作,是在硬盘中一小块区域内的顺序I/O,而不是需要写多个地方的随机I/O,所以写入事务日志是一种相对较快的操作

1.3. 大多数使用这种技术(write-ahead logging,预写式日志)的存储引擎修改数据最终需要写入磁盘两次

1.4. 如果修改操作已经写入事务日志,那么即使系统在数据本身写入硬盘之前发生崩溃,存储引擎仍可在重新启动时恢复更改

2. MySQL中的事务

2.1. 自动提交模式

2.1.1. AUTOCOMMIT

2.1.2. 通过禁用此模式,可以在事务中执行一系列语句,并在结束时执行COMMIT提交事务或ROLLBACK回滚事务

2.2. 可以使用SET命令设置AUTOCOMMIT变量来启用或禁用自动提交模式

2.2.1. 启用可以设置为1或者ON

2.2.2. 禁用可以设置为0或者OFF

2.3. AUTOCOMMIT=0,则当前连接总是会处于某个事务中,直到发出COMMIT或者ROLLBACK,然后MySQL会立即启动一个新的事务

2.4. 除了在禁用AUTOCOMMIT的事务中可以使用之外,其他任何时候都不要显式地执行LOCK TABLES,不管使用的是什么存储引擎

2.5. 执行SET TRANSACTION ISOLATION LEVEL命令来设置隔离级别

2.5.1. 新的隔离级别会在下一个事务开始的时候生效

2.5.2. 最好在服务器级别设置最常用的隔离,并且只在显式情况下修改

2.6. MySQL不在服务器层管理事务,事务是由下层的存储引擎实现的

2.6.1. 在同一个事务中,混合使用多种存储引擎是不可靠的

2.6.2. 为每张表选择合适的存储引擎,并不惜一切代价避免在应用中混合使用存储引擎是非常重要的

2.6.3. 在非事务表中执行事务相关操作的时候,MySQL通常不会发出提醒,也不会报错

2.6.4. 最好不要在应用程序中混合使用存储引擎

2.6.4.1. 失败的事务可能导致不一致的结果,因为某些部分可以回滚,而其他部分不能回滚

2.7. InnoDB使用两阶段锁定协议

2.7.1. two-phase locking protocol

2.7.2. 在事务执行期间,随时都可以获取锁

2.7.3. 但锁只有在提交或回滚后才会释放,并且所有的锁会同时释放

2.8. InnoDB还支持通过特定的语句进行显式锁定

2.8.1. 不属于SQL规范

2.9. 支持LOCK TABLES和UNLOCK TABLES命令,这些命令在服务器级别而不在存储引擎中实现

2.10. 应该使用支持事务的存储引擎

2.10.1. InnoDB支持行级锁,所以没必要使用LOCKTABLES

3. 多版本并发控制

3.1. MVCC

3.2. 行级锁的一个变种

3.2.1. 在很多情况下避免了加锁操作,因此开销更低

3.2.2. 不仅实现了非阻塞的读操作,写操作也只锁定必要的行

3.3. Undo日志写入是服务器崩溃恢复过程的一部分,并且是事务性的

3.3.1. 所有Undo日志写入也都会写入Redo日志

3.3.2. Redo日志和Undo日志的大小也是高并发事务工作机制中的重要影响因素

3.4. 仅适用于REPEATABLE READ和READ COMMITTED隔离级别

3.5. READ UNCOMMITTED与MVCC不兼容

3.5.1. 查询不会读取适合其事务版本的行版本,而是不管怎样都读最新版本

3.6. SERIALIZABLE与MVCC也不兼容

3.6.1. 读取会锁定它们返回的每一行

4. 复制

4.1. 一种原生方式来将一个节点执行的写操作分发到其他节点

4.2. 对于在生产环境中运行的任何数据,都应该使用复制并至少有三个以上的副本

4.3. 理想情况下应该分布在不同的地区(在云托管环境中,称为region)用于灾难恢复计划

5. 数据文件结构

5.1. 在8.0版本中

5.1.1. 将表的元数据重新设计为一种数据字典

5.1.1.1. 在表的.ibd文件中

5.1.1.2. 减少了I/O,非常高效

5.1.2. 删除了基于文件的表元数据存储

5.2. 引入了字典对象缓存

5.2.1. 基于最近最少使用(LRU)的内存缓存

5.2.1.1. 分区定义

5.2.1.2. 表定义

5.2.1.3. 存储程序定义

5.2.1.4. 字符集

5.2.1.5. 排序信息

5.2.2. 当前访问最活跃的那些表,在缓存中最常出现

5.2.2.1. 每个表的.ibd和.frm文件被替换为已经被序列化的字典信息(.sdi)

5.3. 原子DDL

5.3.1. MySQL 8.0引入了原子数据定义更改

5.3.2. 数据定义语句现在要么全部成功完成,要么全部失败回滚

6. InnoDB引擎

6.1. MySQL主要的改进核心在于InnoDB的演进

6.1.1. 表元数据、用户认证、身份鉴权这些内部统计信息的管理也已经调整为使用InnoDB表来实现

6.2. MySQL的默认事务型存储引擎

6.2.1. 现在已经成为金标准,是推荐使用的引擎

6.2.2. 最重要、使用最广泛的引擎

6.2.3. 为处理大量短期事务而设计的,这些事务通常是正常提交的,很少会被回滚

6.2.4. 几乎能覆盖每一种使用场景

6.3. 最佳实践是使用InnoDB存储引擎作为所有应用程序的默认引擎

6.4. 将数据存储在一系列的数据文件中,这些文件统被称为表空间(tablespace)

6.4.1. 表空间本质上是一个由InnoDB自己管理的黑盒

6.5. 使用MVCC来实现高并发性,并实现了所有4个SQL标准隔离级别

6.5.1. 默认为REPEATABLE READ隔离级别

6.5.2. 通过间隙锁(next-key locking)策略来防止在这个隔离级别上的幻读

6.5.2.1. 不只锁定在查询中涉及的行,还会对索引结构中的间隙进行锁定,以防止幻行被插入

6.6. InnoDB表是基于聚簇索引构建的

6.6.1. 聚簇索引提供了非常快速的主键查找

6.7. 通过一些机制和工具支持真正的在线“热”备份

6.7.1. Oracle专有的MySQL Enterprise Backup

6.7.2. 开源的Percona XtraBackup

6.8. 引入了SQL函数来支持在JSON文档上的丰富操作

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

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

相关文章

AMD Zen4最后一招!64核心只需200W

AMD Zen4已经布局得差不多了,不过在服务器上还有最后一招,那就是面向边缘计算、电信基础设施等不需要太强性能、但对功耗和能效很敏感的Siena系列。 Zen4霄龙已经发布了三个系列,标准的Genoa(96核心)、集成3D缓存的Genoa-X(96核心/1152MB三级…

关于牛津大学暑研项目的总结和收获

关于牛津大学暑研项目的总结和收获 关于这篇博客主要是想记录一下这次项目的一些收获和心得,一如三年前参与新加坡国立大学的寒研项目一样。我这次的参加的日期是在八月份的数学,物理和计算机类的,这次分享的内容主要集中在学术、生活和思维…

生信豆芽菜-TMEscore预测免疫浸润程度

网址:http://www.sxdyc.com/immuneTmeScore 一、TMEscore预测免疫浸润程度介绍 使用TMEscore包预测患者免疫浸润程度;参考文章Cancer Immunology Research, 2019, 7(5), 737-750;DOI: 10.1158/2326-6066.CIR-18-0436;PMID: 30842092 二、使用方法 1、数据准备 一个全…

单片机串口通讯实战:详解STM32的串口编程与数据传输

引言: 单片机串口通讯是应用非常广泛的通讯方式,具有简单、灵活、稳定等特点。本文将深入探讨单片机串口通讯的原理、应用和性能优化,同时介绍如何使用STM32单片机进行串口编程,并提供详细的代码示例和注释。 一、单片机串口通讯…

都错了!机械硬盘远比SSD更省电 最多领先94%

相信在绝大多数人的认知中,SSD固态硬盘因为没有HDD机械硬盘那样的移动部件,不但更稳定,还更省电。 但是,存储服务商Scality的研究表明,恰恰相反,HDD更省电。 他们以美光6500 ION 30.72TB QLC SSD、希捷银河…

如何安装Python?

如何安装Python? 安装Python非常简单,让我们一步步来进行。 1. 访问官方网站 首先,您需要访问Python官方网站(https://www.python.org/)。在首页上,您会看到一个大大的「Downloads」按钮,点击…

深信服数据中心管理系统 XXE漏洞复现

0x01 产品简介 深信服数据中心管理系统DC为AC的外置数据中心,主要用于海量日志数据的异地扩展备份管理,多条件组合的高效查询,统计和趋势报表生成,设备运行状态监控等功能。 0x02 漏洞概述 深信服数据中心管理系统DC存在XML外部实…

Python的变量命名规则是什么?

Python的变量命名规则 在Python中,变量是用来存储数据的,而变量命名是为了方便我们理解和引用这些数据。Python的变量命名规则相对灵活,但也有一些基本规则和约定,让我们一起来了解一下。 基本规则 只能包含字母、数字和下划线&…

使用 flatMap 进行扁平化映像处理数据

实战背景 : 小伙伴遇到了数据处理方面的问题如下 : 只能说看到这里我也一头雾水,毕竟我也是菜🐶,那就请教大佬吧 : Map.flat 循环 二维 变 一维 就是 flatMap 了 啊这,,但是 flatM…

[python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决

这篇文章主要讲述Python如何安装Numpy、Scipy、Matlotlib、Scikit-learn等库的过程及遇到的问题解决方法。最近安装这个真是一把泪啊,各种不兼容问题和报错,希望文章对你有所帮助吧!你可能遇到的问题包括: ImportError: N…

Spring Boot+ redis执行lua脚本的5种方式

Spring Boot redis执行lua脚本示例 文章目录 Spring Boot redis执行lua脚本示例0.前言1.基础介绍2.步骤2.1. 引入依赖1. 使用Jedis作为Redis客户端:2. 使用Lettuce作为Redis客户端: 2.2. 配置文件使用Jedis作为Redis客户端的配置文件(applica…

突破防线!泛微OA任意文件上传Getshell

子曰:“巧言令色,鲜矣仁。” 漏洞复现 访问漏洞url: 存在漏洞的路径为 /weaver/weaver.common.Ctrl/.css?arg0com.cloudstore.api.service.Service_CheckApp&arg1validateApp漏洞利用: 漏洞证明: 文笔生疏&…

2021年12月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:统计指定范围里的数 给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。 时间限制:1000 内存限制:65536 输入 第一行1个整数n、,分别表…

Intel 12代酷睿集体大降价!三折太离谱了

之前有德国媒体报道称,Intel 12/13代酷睿以及即将发布的14代酷睿,将会全面涨价。 没想到,12代酷睿大降价了,幅度相当不可思议,不过至少目前仅限美国市场,新蛋、亚马逊、MicroCenter等大型零售商集体行动。 …

C#__匿名方法和Lambda表达式

class Program{static void Main(string[] args){// 匿名方法&#xff1a;方法没有名字Func<int, int, int> plus delegate (int a, int b){return a b;};// 这里相当于直接把要引用的方法直接写在后面// 优点&#xff1a;减少了要编写的代码&#xff0c;减少代码的复杂…

BGP的路由反射器和联邦

1、规划IP及拓扑图 172.16.0.0/16 借到24位 可用范围网段&#xff1a;0-31 172.16.0.0/24 要分6个网段IP借3位 172.16.0.0/27 172.16.0.32/27 172.16.0.64/27 172.16.0.96/27 172.16.0.128/27 172.16.0.160/27 作为骨干网段 172.16.1.0/24 6个建邻环回…

生信豆芽菜-相关性散点图

网址&#xff1a;http://www.sxdyc.com/panCancerScatterDiagram 1、数据准备 第一个文件&#xff1a;相关性分析结果 2、选择想要显示的肿瘤的名称&#xff0c;如果是多个&#xff0c;就用逗号隔开&#xff08;这里的逗号为英文字符下的逗号&#xff09; 3、结果 当然&…

Lie group 专题:Lie 群

Lie group 专题&#xff1a;Lie 群 流形 流形的定义 一个m维流形是满足以下条件的集合M&#xff1a;存在可数多个称为坐标卡&#xff08;图集&#xff09;的子集合族.以及映到的连通开子集上的一对一映射&#xff0c;,称为局部坐标映射&#xff0c;满足以下条件 坐标卡覆盖M…

Program Evaluation and Review Technique(PERT)

Program Evaluation and Review Technique&#xff08;PERT&#xff09;计划评估和审查技术 大多数的时候&#xff0c;我不太记得概念&#xff0c;大致是这么回事&#xff0c;为了方便记忆&#xff0c;从小到大 1)beta distribution 贝塔分布&#xff08;成本&#xff0c;也可以…

C++11并发与多线程笔记(2)线程启动、结束,创建线程多法、join,detach

C11并发与多线程笔记&#xff08;2&#xff09; 线程启动、结束&#xff0c;创建线程多法、join&#xff0c;detach 1. 范例演示线程运行的开始1.1 创建一个线程&#xff1a;1.2 join1.3 datch1.4 joinable 2. 其他创建线程的方法2.1 用类 重载了函数调用运算符2.2 lambda表达式…