高性能MySQL第四版

主要列出与第三版的区别

第一章、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.rhkb.cn/news/143350.html

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

相关文章

基于微信小程序的奶茶点餐小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

【力扣2057】值相等的最小索引

👑专栏内容:力扣刷题⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、题目描述二、题目分析 一、题目描述 题目链接:值相等的最小索引 给你一个下标从 0 开始的整数数组 nums …

文件的随机读写函数:ftell rewind

目录 函数介绍: ftell: 函数原型: 举例: 文件内容展示: 代码操作: 结果: rewind: 函数原型: 举例: 文件内容展示: 代码操作&#xff1…

[C++随笔录] stack queue使用

stack && queue使用 stackqueue题目训练 stack 栈的特点是 先进后出(first in last out) 我们可以看出, stack的接口相比 vector/string/list 的接口少的太多了 构造函数 && 容器适配器 容器适配器的含义: 首先, 适配器 — — 用户传数据进来, 我们用合适的…

Vulnhub-driftingbules:5 靶机复现完整过程

kali的IP地址:192.168.200.14 靶机IP地址:192.168.200.60 一、信息收集 1.对利用nmap目标靶机进行扫描 由于arp-scan属于轻量级扫描,在此直接使用nmap进行对目标靶机扫描开放端口 nmap -A -p 1-65535 192.168.200.60使用nmap扫描 开放的端…

Unity引擎更新收费模式:从收入分成转向游戏安装量,将会有哪些影响呢

一、前言 Unity 引擎宣布自 2024 年 1 月 1 日起,将根据游戏安装量对开发者进行收费。官网通知如下 收费模式如图 这张图的大致意思就是, 从2024年1月1日开始,Unity将对所有达标的用户(开发者)根据游戏安装量征收“安…

STM32 NVIC中断优先级管理通过结构图快速理解

STM32 NVIC中断优先级管理通过结构图快速理解 📑抢占优先级和响应优先级基本常识 🌿抢占优先级的级别高于响应优先级。🌿抢占优先级数值编号越小,所代表的优先级就越高;同理,响应优先级也是如此。&#x1…

存档&改造【02】下载文件模板 打印二维码样式设置

1.下载文件模板 文件模板获取得先设置好全局变量和获取文件URL 声明变量 function fileDownload(url, name) {return new Promise((resolve, reject) > {var xhr new XMLHttpRequest();xhr.open("GET", url, true); // 也可以使用POST方式,根据接口…

Redis的安装与基本使用

文章目录 Linux 环境下安装Redis下载Redis 安装包解压安装包安装Redis进入redis安装包下编译并且安装到指定目录下 启动redis配置远程访问找到Redis.config文件 Windows 环境下安装Redis说明官方提供方式安装或启用WSL2在WSL(Ubuntu)上安装Redis启动Redi…

【三次握手、四次挥手】TCP建立连接和断开连接的过程、为什么需要三次握手,为什么需要四次挥手、TCP的可靠传输如何保证、为什么需要等待2MSL等重点知识汇总

目录 三次握手 为什么握手需要三次 四次挥手 为什么挥手需要四次 TCP的可靠传输如何保证 TIME_WAIT等待的时间是2MSL 三次握手 三次握手其实就是指建立一个TCP连接。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的…

IOTE 2023国际物联网展直击:芯与物发布全新定位芯片,助力多领域智能化发展

IOTE 2023国际物联网展,作为全球物联网领域的盛会,于9月20日在中国深圳拉开帷幕。北斗星通集团应邀参展,旗下专业从事物联网、消费类GNSS芯片研发设计的芯与物公司也随其亮相本届盛会。 展会上,芯与物展示了一系列创新的GNSS定位…

Spring 学习(四)注解实现自动装配及注解开发

1. 注解实现自动装配 JDK 1.5 开始支持注解&#xff0c;Spring 2.5 开始支持注解。 使用须知 导入约束 配置注解的支持&#xff08; <context:annotation-config/> &#xff09; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns&qu…

在pandas中使matplotlib动态画子图的两种方法【推荐gridspec】

先上对比图&#xff0c; 第一种方法&#xff0c;这里仅展示1个大区&#xff0c;多个的话需要加一层循环就可以了&#xff0c;主要是看子图的画法 当大区下面的国家为1个或2个时&#xff0c;会进行报错 # 获取非洲国家列表 african_countries df[df[大区] 南亚大区][进口国…

flink中不同序列化器性能对比

背景 flink有多种序列化方式&#xff0c;包括flink内置的以及fallback到kryo的&#xff0c;那么他们之间有多大的性能差距呢&#xff0c;本文就从https://flink.apache.org/2020/04/15/flink-serialization-tuning-vol.-1-choosing-your-serializer-if-you-can/这篇文章里摘录…

【李沐深度学习笔记】线性代数实现

课程地址和说明 线性代数实现p2 本系列文章是我学习李沐老师深度学习系列课程的学习笔记&#xff0c;可能会对李沐老师上课没讲到的进行补充。 这节就算之前内容的复习&#xff0c;后面以截图形式呈现 标量由只有一个元素的张量表示 import torch x torch.tensor([3.0]) y …

华为云云耀云服务器L实例评测|搭建CounterStrike Source Delicated Server(CS起源游戏服务器)

华为云云耀云服务器L实例评测&#xff5c;搭建CounterStrike Source Delicated Server&#xff08;CS起源游戏服务器&#xff09; #【有奖征文】华为云云服务器焕新上线&#xff0c;快来亲身感受评测吧&#xff01;# ⭐️ CounterStrikeSource&#xff08;CS起源是Valve的一款…

【Vue简介+搭建Vue开发环境+Hello小案例】

Vue简介搭建Vue开发环境Hello小案例 1 Vue简介2 搭建Vue开发环境3 Hello小案例 1 Vue简介 Vue是一套用于构建用户界面的渐进式JavaScript框架。&#xff08;渐进式&#xff1a;Vue可以自底向上逐层的应用<简单应用&#xff1a;只需要一个轻量小巧的核心库><复杂应用&…

tp8 Editor.md

Editor.md - 开源在线 Markdown 编辑器 放于public文件夹下 html代码&#xff1a; <div class"layui-col-md12" id"content"><textarea name"content" placeholder"详情" class"layui-textarea">{notempty nam…

05-Zookeeper典型使用场景实战

上一篇&#xff1a;04-Zookeeper集群详解 1. Zookeeper 分布式锁加锁原理 如上实现方式在并发问题比较严重的情况下&#xff0c;性能会下降的比较厉害&#xff0c;主要原因是&#xff0c;所有的连接都在对同一个节点进行监听&#xff0c;当服务器检测到删除事件时&#xff0c…

目标追踪学习经验总结

标题目标追踪算法学习经验总结   最近对目标追踪算法进行了学习&#xff0c;以下是我的学习经验&#xff0c;如有不对之处&#xff0c;欢迎大家指正。 1、简介 1.1 定义 目标跟踪是通过分析视频图片序列&#xff0c;对检测出的各个候选目标区域实施匹配&#xff0c;定位出这…