高性能MySQL第四版

news2024/11/24 17:49:19

主要列出与第三版的区别

第一章、MySQL架构

MySQL逻辑架构

左右分别是第三和第四版。

第四版架构图里把第二层的“查询缓存”去掉了,也去掉了对应的文字描述。

连接管理和安全

“每个 客户 端 连接 都会 在 服务器 进程 中 拥有 一个 线程” 

第四版对这句话增加了一个前提 “默认情况下”

优化与执行

第三版中说“对于 SELECT 语句, 在 解析 查询 之前, 服务器 会 先 检查 查询 缓存。。。。”

第四版指出,由于并发的增加,缓存反而会成为瓶颈。因此在5.7.20版本,查询缓存被作为废弃特性。到了8.0版本,查询缓存完全被移除。应用程序可以自己用memcached或Redis缓存查询结果。

并发控制

第三版使用“ Unix 系统 的 email box ”为例。

第四版改用spreadsheet(Google的excel)做例子。

表锁

第三版这段被删了:“尽管 存储 引擎 可以 管理 自己的 锁, MySQL 本身 还是 会使 用 各种 有效 的 表 锁 来 实现 不同 的 目的。。。。。。”

行锁

第三版说“服务器 层 完全 不了解 存储 引擎 中的 锁 实现。”

第四版改成 “服务器 层 几乎 不了解 存储 引擎 中的 锁 实现。” 并增加了注解,说明有元数据锁,以及“应用层锁功能”。

事务

隔离级别

第四版在批注里给了两篇文章的链接,供数据库新人了解SQL的隔离级别:A Critique of ANSI SQL Isolation Levels | the morning paper (acolyer.org),Consistency Models (jepsen.io)。

MySQL中的事务

第三版谈到了其他存储引擎如  和 NDB Cluster, XtraDB 和 PBXT。 

第四版只讲 InnoDB

在事务中混合使用存储 引擎

第四版增加了一个警告:在应用程序中最好不要混合使用多引擎。

隐式和显式锁定

第三版为  SELECTLOCK IN SHARE MODE

第四版改成8.0版本的写法  SELECTFOR SHARE

多版本并发控制

第三版说每个记录后面有两个隐藏列,并分了增删改查四种情况来描述InnoDb的mvcc操作

第四版把这部分描述全部重写了,并增加了一幅图来说明

每个事务开始时会分配一个事务ID,当该事务改写了一条记录,就会往Undo日志里面写一条Undo记录,其中带有该事务的ID,而回滚指针会指向这条Undo记录。这个机制也是事务回滚所需要的。

当另一个会话事务来读取记录时,InnoDb会比较这个会话里面的事务ID和记录里面的事务ID。如果记录状态对该事务应当不可见(比如修改记录的事务还没提交),那就会一直跟踪UndoLog记录,直到这条记录里面的事务ID符合对本会话事务可见的条件。这个跟踪过程可能会一直循环,循环结束的条件有可能是发现这条记录已经被删了。

事务中删除记录是通过设置记录中“info flag”的“删除位”来实现的。在UndoLog中被记录为“清除删除掩码”。

另外第四版还给了两篇博客链接来了解InnoDb的数据结构和mvcc。

The physical structure of records in InnoDB – Jeremy Cole (jcole.us)

The basics of the InnoDB undo logging and history system – Jeremy Cole (jcole.us)

感觉第四版这里写的也不是很清晰。

复制

第三版没有这一节,属于第四版新增内容。

这里简单介绍了复制,第9章会详细说明。

在源节点上,每个复制节点对应一个复制客户端的线程,并在发生写操作时被唤醒并发送新数据。

生产环境必须配置复制而且最少三个,最好还是不同地理位置的(云上的话就是不同区域)。

这些年的主要更新有:全局事务标识、多源复制、并行复制、半同步复制。

数据文件结构

第三版没有这一节,属于第四版新增内容。

8.0表的元数据被重新设计,放到数据字典表中。表的结构信息支持事务和原子定义修改。还增加了字典对象缓存,减少了服务器获取表元数据时的IO操作,更加高效。

InnoDB引擎

第三版除了InnoDB引擎之外还介绍了好几个其他的引擎。

第四版只介绍了InnoDB,其他引擎内容都删了。

此外还删除了“InnoDB的历史”这一节。

删除了这段  “在 MySQL 4. 1 以后 的 版本 中, InnoDB 可以 将 每个 表 的 数据 和 索引 存放 在 单独 的 文件 中。 InnoDB 也可以 使用 裸 设备 作为 表 空间 的 存储 介质, 但 现代 的 文件 系统 使得 裸 设备 不再 是 必要 的 选择。”

删除了这段 InnoDB 的 存储 格式 是 平台 独立 的, 也就是说 可以 将 数据 和 索引 文件 从 Intel 平台 复制 到 PowerPC 或者 Sun SPARC 平台。

增加了一段:5.6版本开始引入了在线DDL,刚开始仅有限的使用场景,在5.7和8.0有扩展。某些特定的表变更不需要全表锁也不需要外部工具,第6章会介绍。

JSON文档支持

为第四版新增内容

5.7引入JSON类型,支持自动校验和存储优化。还引入了支持JSON文档操作的SQL函数。8.0.7还支持在JSON数组上建立多值索引。第6章会介绍

数据字典变更

为第四版新增内容

8.0的另一个大变化是表的元信息存储,不再是保存到文件里面,而是移到数据字典里面,使用InnoDB表存储。这样在崩溃-恢复场景下,表的变更也也能通过事务化的方式来处理了。以前备份时需要依赖表的元数据文件来获取表的定义,现在也改成查新的数据字典来获取。

原子DDL

8.0引入。这样多个ddl语句就可以保证一起成功或者一起回滚。

版本变迁和开发模式

第三版有这两节,第四版全删了。

总结

第四版删除了第三版的这两段:

MySQL 最初 基于 ISAM 构建( 后来 被 MyISAM 取代), 其后 陆续 添加 了 更多 的 存储 引擎 和 事务 支持。 MySQL 有 一些 怪异 的 行为 是由 于 历史 遗留 导致 的。。。

当然, 存储 引擎 API 的 架构 也有 一些 缺点。 有时候 选择 多 并非 好事, 而在 MySQL 5. 0 和 MySQL 5. 1 中有 太多 的 存储 引擎 可以 选择。 InnoDB 对于 95% 以上 的 用户 来说 都是 最佳 选择。。。

并增加说明InnoDB是主要的发展方向,而且本书也主要讲InnoDB。

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

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

相关文章

英语——分享篇——每日100词——501-600

hill——will愿意——他不愿意去小山里 Easter——east东方(熟词)er儿(拼音)——东方的儿子都过复活节 exhibition——ex前夫(熟词)hi嗨(熟词)bition比神(谐音)——展览会上前夫很嗨,比神还开心 chase——vt.追捕,追逐,追赶——cha茶se色——…

国庆day1

消息队列 代码 发送 #include<myhead.h> //声明一个消息结构体 typedef struct {long msgtype; //消息类型char data[1024]; //消息正文 }Msg_s; #define SIZE sizeof(Msg_s)-sizeof(long) //消息正文的大小 int main(int argc, const char *argv[]) {key_t key; /…

HashMap底层源码,数据结构

HashMap的底层结构在jdk1.7中由数组链表实现&#xff0c;在jdk1.8中由数组链表红黑树实现&#xff0c;以数组链表的结构为例。 JDK1.8之前Put方法&#xff1a; JDK1.8之后Put方法&#xff1a; HashMap基于哈希表的Map接口实现&#xff0c;是以key-value存储形式存在&#xff0c…

lwip开发指南2

目录 NTP 协议实验NTP 简介NTP 实验硬件设计软件设计下载验证 lwIP 测试网速JPerf 网络测速工具JPerf 网络实验硬件设计软件设计下载验证 HTTP 服务器实验HTTP 协议简介HTTP 服务器实验硬件设计下载验证 网络摄像头&#xff08;ATK-MC5640&#xff09;实验ATK-MC5640 简介SCCB …

wait函数与waitpid函数

1.函数介绍 2.wait函数 #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *wstatus); 功能&#xff1a;等待任意一个子进程结束&#xff0c;如果该子进程结束了&#xff0c;此函数会回收子进程的资源 参数&#xff1a; -int *wstatus&#xff1a;…

26602-2011 工业用2-吡咯烷酮 知识梳理

声明 本文是学习GB-T 26602-2011 工业用2-吡咯烷酮. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了工业用2-吡咯烷酮的要求、试验方法、检验规则以及标志、包装、运输和贮存等。 本标准适用于γ-丁内酯和氨合成制得的2-吡咯烷酮…

MySQL Installer is running in Community mode

每天很准时的弹出&#xff1a; 这是由于检查MySql并且更新的一个定时任务&#xff0c;没有更新成功导致 解决办法&#xff1a;禁用定时任务 1.先关闭错误框 2.打开控制面板 &#xff0c;使用小图标查看 3. 打开管理工具&#xff0c;双击打开任务计划程序 4.双击进入&#xf…

【项目】基于C++11实现的数据库连接池

文章目录 前置知识关键技术点项目背景连接池功能点介绍MySQL Server参数介绍功能设计连接池功能点介绍开发平台选型关于MySQL数据库编程MySQL接口介绍测试表设计Connection设计数据库配置文件mysql.conf日志文件log.hppConnectionPool设计压力测试源码链接:前置知识 关键技术…

护眼灯什么价位的好?最具性价比的护眼台灯推荐

到了晚上光线比较弱&#xff0c;这时候就需要开灯&#xff0c;要是孩子需要近距离看字学习等等&#xff0c;给孩子选择的灯具要特别的重视。护眼灯就是目前颇受学生家长青睐的灯具之一&#xff0c;越来越多的人会购买一个护眼灯给自己的孩子让孩子能够在灯光下学习的时候&#…

「C++之STL」关于在模拟实现STL容器中的深浅拷贝问题

文章目录 前言杨辉三角深浅拷贝问题模拟实现的vector对题目杨辉三角引发的程序崩溃原因解决办法 前言 在学习STL容器中,不仅需要学会容器的使用,同时也需要了解容器的大体框架以及各个函数的模拟实现才能更好的去了解这个容器; 杨辉三角 在LeetCode中有一道这样的题目,给定一…

数据链路层 MTU 对 IP 协议的影响

在介绍主要内容之前&#xff0c;我们先来了解一下数据链路层中的"以太网" 。 “以太网”不是一种具体的网络&#xff0c;而是一种技术标准&#xff1b;既包含了数据链路层的内容&#xff0c;也包含了一些物理层的内容。 下面我们再来了解一下以太网数据帧&#xff…

Qt扫盲-QSqlRelationalTableModel 理论总结

QSqlRelationalTableModel 理论总结 一、概述二、使用概述三、常用 一、概述 QSqlRelationalTableModel的行为类似于QSqlTableModel&#xff0c;但允许将列设置为进入其他数据库表的外键。 二、使用概述 在上面左边的截图显示了 QTableView 中的普通 QSqlTableModel。外键(…

Unity如何生成随机数(设置种子)

文章目录 随机类整数二维向量三维向量种子其他文章 随机类 我们可以使用Random类来生成一些随机数 Random类是Unity提供的用于生成随机数的类之一。它可以用于生成不同类型的随机数&#xff0c;如整数、浮点数和向量。 整数 我们可以使用Random.Range来生成指定范围内的随机…

【Verilog 教程】6.5 Verilog避免Latch

关键词&#xff1a;触发器&#xff0c;锁存器 Latch 的含义 锁存器&#xff08;Latch&#xff09;&#xff0c;是电平触发的存储单元&#xff0c;数据存储的动作取决于输入时钟&#xff08;或者使能&#xff09;信号的电平值。仅当锁存器处于使能状态时&#xff0c;输出才会随着…

虹科Pico汽车示波器诚邀您加入精准诊断时代,助您成为修车大师!

虹科Pico汽车示波器的口号是&#xff1a; 面向未来诊断&#xff0c;定义精准时代 淘汰人的是工具从来不是年龄&#xff01;虹科Pico汽车示波器能够让您掌握现代的诊断工具&#xff0c;让您更高效的诊断故障原因。 我们有专业的设备与优质的技术服务&#xff01;让每个用户自…

卷麻了,00后测试用例写的比我还好,简直无地自容。。。

前言 作为一个测试新人&#xff0c;刚开始接触测试&#xff0c;对于怎么写测试用例很头疼&#xff0c;无法接触需求&#xff0c;只能根据站在用户的角度去做测试&#xff0c;但是这样情况会导致不能全方位的测试APP&#xff0c;这种情况就需要一份测试用例了&#xff0c;但是不…

Cruise 从零搭建模型

第一步&#xff0c;新建一个project&#xff1a; 下面添加version&#xff1a; 将该新建的task加载进来&#xff0c;然后保存&#xff1a; 保存完之后&#xff0c;文件夹内多了很多内容&#xff1a; 可以看出&#xff0c;用这种方法&#xff0c;只能建立两层文件夹&#xff0c;…

LeetCode —— 回溯

77. 组合 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 示例&#xff1a;输入&#xff1a;n 4, k 2 输出&#xff1a; [ [1,2], [1,3], [1,4], [2,3], [2,4], [3,4]] class Solution {List<List<Integer>> list new…

【面试经典150 | 数组】H 指数

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;排序方法二&#xff1a;二分方法三&#xff1a;计数排序 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&am…

java-普通项目中多个模块间的引用

背景&#xff1a; 项目下面有一个common的模块&#xff0c;其他模块引用 现象&#xff1a; 当class文件直接在src下面的时候 其他模块引用解析不了 当class文件在allUtils的时候是可以解析的