搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
IT小白
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
【Python】已解决:WARNING: pip is configured with locations that require TLS/SSL, however the ssl module i
2
基于RTMP协议流媒体直播的整体解决方案_rtmp流媒体
3
LinuxUNIX系统编程手册——(十四)系统编程概念
4
Hadoop集群中hive搭建_hadoop集群搭建hive
5
解决 git:OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0
6
时隔两年,盘点ECCV 2018影响力最大的20篇论文_eccv 2018 image inpainting for irregular holes usi
7
Python中常用的自然语言处理(NLP)框架_python自然语言提取 框架
8
【Java】Win11 Java/JDK 安装教程(超详细,内置 JDK 安装包)_jdk11安装包
9
Qt树形控件QTreeView使用1——节点的添加删除操作_qtreeview删除节点后有空行_qtreeview添加子节点
10
android:exported =true,什么是具有相同用户ID的Android应用程序_android 带有相同用户id的应用程序
当前位置:
article
> 正文
MySQL-MySQL逻辑架构
作者:IT小白 | 2024-07-30 10:04:42
赞
踩
MySQL-MySQL逻辑架构
文章目录
目录
文章目录
前言
一、MySQL逻辑架构
二、并发控制
三、事务
四、多版本并发控制MVCC
五、MySQL的存储引擎
总结
前言
主要介绍了MySQL逻辑架构。
一、MySQL逻辑架构
连接管理与安全
连接管理
客户端拥有服务器进程中的一个线程,在这个线程中执行查询(服务器缓存线程无需为每个连接建立新线程)
安全
连接时服务器会对客户端(应用)认证,连接成功服务器继续验证查询权限
优化与执行
MySQL解析查询构建解析树,对其进行优化,用户可以通过关键字hint影响优化,也可以请求服务器explain优化细节
存储引擎会影响优化效果,优化器请求存储引擎信息作为优化方式选择的条件,如一些索引和scheme的优化与存储引擎相关
查询缓存中找到查询后无需解析优化,可以直接返回缓存中的结果
二、并发控制
读写锁
共享锁(读锁)、排他锁(写锁)
锁粒度
表锁(服务器和存储引擎层都可实现)、行级锁(只在部分存储引擎层实现)
三、事务
ACID原子/一致/隔离/持久性,必须全部一起完成的一组动作
隔离级别
未提交读(脏读、不可重复读、幻读)
每次都读最新数据行,不管是否提交,不符合当前事务的版本,与MVCC不兼容
提交读(不可重复读、幻读)
提交读每次都读最新提交后的版本
可重复读可通过事务版本号确定哪些版本的行可以读,最新版本可能不能读
可重复读(幻读)
幻读:用户a读一段空间内数据,同时另一个用户b在这段空间写入一行,用户a读到用户b写入的幻行,MVCC通过间隙锁(在索引的间隙中加锁)解决
可串行化(加锁读,强制事务串行化)
所有读取的行都加锁,与MVCC不兼容
死锁
锁粒度小导致一次任务需要多把锁,然后出现多个线程请求保持情况,通过回滚一个事务释放一些锁可以解决
事务日志
预写式日志,修改内容时,先将修改行为记录到硬盘上的可以快速顺序I/O的事务日志中,然后再慢慢随机I/O修改磁盘上的数据本身,修改一次访问磁盘两次,但是第一次很快,可以提高效率
MySQL的事务
自动提交
在没有显示的创建事务时,每一个查询都自动被提交为一个单独的事务
事务中混合使用存储引擎
事务在存储引擎层实现,服务器层对于事务型存储引擎和非事务性存储引擎的混合一般不会报错,但是在回滚时,非事务型存储引擎中的操作会回滚失败导致数据库不一致问题
显示/隐式锁定
InnoDB事务型存储引擎隐式加行锁,用户可在MyISAM存储引擎的服务器层显示加表锁=
四、多版本并发控制MVCC
行级锁的变种(尽量避免加锁,降低开销),通过保存数据在某个时间点的快照实现,每个事务依据其执行开始的时间看到表在某一时刻的快照
只与 [提交读] 和 [可重复读] 两个隔离级别兼容
InnoDB的MVCC
在每行记录后添加隐藏的两个列,一个记录行创建时系统版本号,一个记录行过期时系统版本号
每次执行一个事务,系统版本号会作为该事务的版本号然后自动递增,将查询到的行数据版本号与事务版本号比较
SELECT
数据行创建版本号<=事务版本号(事务开始前/事务本身添加的数据行)
数据行过期版本号>事务版本号或不存在(事务开始前该行未失效)
INSERT / DELETE
保存当前系统版本号作为行 创建 / 失效 版本号
UPDATE
INSERT一条新数据、DELETE旧数据,当前版本号分别作为这两行数据的 创建 / 失效 版本号
五、MySQL的存储引擎
数据目录下的一个子目录存数据库(shcema),数据库目录下存一个与表同名的 table.frm 文件保存表的定义
InnoDB存储引擎
默认使用这个,对大数据读写都合适,可以应用于订单处理(必须支持事务)
支持行级锁(在存储引擎层隐式上锁),支持事务,B+树建立聚簇和二级索引、自适应hash索引、支持在线热备份、数据存在磁盘
数据和索引一起存在 table.idb 文件
聚簇索引:对于主键建立索引,其叶子结点直接存数据
二级索引:非主键索引的叶子结点存主键,没有索引覆盖时需要回表,主键要尽可能小
MyISAM存储引擎
对日志型应用、只读的表、不建议崩溃恢复的表、无需事务的操作、小数据合适
支持表锁(读共享写排他)、支持全文索引(关键词)、B+树建立非聚簇索引(叶子节点存指针,数据不存在索引中)、支持压缩表(只读表压缩后可大大减少磁盘I/O次数)、支持空间函数(地理空间的搜索)、数据存在磁盘
不支持事务、不支持行级锁、不支持崩溃后的安全恢复
数据存在 table.MYD文件 索引存在 table.MYI文件
Memory存储引擎
快速访问不会改变的、掉电可丢失的数据时用
支持表级锁、支持Hash索引
数据都存在内存,无需磁盘I/O,速度很快;重启后结构保存数据丢失
在MySQL中查询时需要利用临时表存储中间数据时,首先考虑Memory表,如果结果太多存不下则转换为MyISAM表
转换表的存储引擎
修改表(高效)
ALTER TABLE xxx ENGINE=XXX
导出与导入(安全)
导出数据后,在CREAT TABLE语句中修改ENGINE后,再重新导入
创建与查询(高效又安全)
创建新表CREAT TABLE xxx,修改旧表ALTER TABLE xxx ENGINE=XXX后,改后的旧表数据插入新表INSERT INTO xxx SELECT * FROM xxx
总结
本文内容由网友自发贡献,转载请注明出处:
【wpsshop博客】
推荐阅读
article
Galera
Cluster
for
MySQL
详解(三)——管理监控_
wsrep
: receiv...
目录一、管理1. 在线DDL(1)TOI(2)RSU(3)pt-online-schema-change2. 恢复主组件...
赞
踩
article
Java
常见的
面试
题(
MySql
)_
java
mysql
面试
...
Java
常见的
面试
题(
MySql
)_
java
mysql
面试
java
mysql
面试
...
赞
踩
article
互联网
Java
工程师
面试题系列(
MySQL
面试题)_
java
工程师
mysql
测试题
...
1、
MySQL
中有哪几种锁?1、表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最 高,并发度最低。...
赞
踩
article
[MySQL][深入理解隔离性][下][
Read
View
]详细讲解_
mysql
read
view
...
[MySQL][深入理解隔离性][下][
Read
View
]详细讲解_
mysql
read
view
mysql
read
...
赞
踩
article
mysql
read
-
view
_
mysql
事物
隔离
级别和传播行为 本文作者: 开发者首页...
事务
隔离
级别事务
隔离
级别的语义:当前事务执行过程中,通过select,update,delete 操作,对其他事务的影响...
赞
踩
article
mysql
read
-
view
_
read
view
初探...
innodb为实现MVCC所使用的内部快照,RR(REPEATABLE READ)隔离级别下在第一次查询时创建
read
...
赞
踩
article
Mysql
readview
理解...
https://baijiahao.baidu.com/s?id=1629409989970483292&wfr=spi...
赞
踩
article
MySQL
· 源码分析 ·
InnoDB
的
read
view
,回滚段和
purge
过程简介...
笔者最近开始学习
InnoDB
的内部机制,参照之前的几篇文章整理出
InnoDB
多版本部分相关的一些实现原理。
InnoDB
...
赞
踩
article
MySQL
MVCC
的详解之
Read
View
_readview...
本文由浅入深讲解了
MySQL
MVCC
实现机制,以及其基础READ VIEW判定_readviewreadview ...
赞
踩
article
MySQL
-
MVCC
:概述、工作原理、
readView
实现
快照
读、
数据库
解决问题
、
MVCC
无法防止超...
本文详细介绍了
MySQL
中的
MVCC
(多版本并发控制)机制,包括其工作原理、
readView
实现
快照
读、如何解决并发问题...
赞
踩
article
mysql
8
初始化
失败
_
mysql
– 安装过程中出错 –
数据库
初始化
失败
...
在安装MySQLServer(Apply Configurations)的最后一步中,我收到一个奇怪的错误.我无法得到它...
赞
踩
article
linux
下
mysql
8.
0
端口号
为
0
,
linux
mysql
8
端口号
为
0
port
mysq...
1.系统版本,
mysql
版本:一般情况下没有如果是权限原因或者防火墙原因就不说了网上资料多的一塌糊涂 但是简单说一下几个...
赞
踩
article
MySQL
(构建
服务器
)_innodb:
creating
foreign
key constrai...
本案例要求熟悉
MySQL
官方安装包的使用,快速构建一台数据库
服务器
:安装
MySQL
-server、MySQl-clien...
赞
踩
article
mysql
8.0
报
1045
_Mysql
8.0
.
13
登录
报
1045
(28000)错误...
以下修改
登录
报错:
mysql
-
8.0
.
13
ERROR
1045
(28000): Access denied for ...
赞
踩
article
mysql
不能使用
mysql
-
u
root
-
p
启动报错解决_
u
b
u
nt
u
@vm-
0
-12-
u
...
今天在登录自己前段时间在云上安装的
mysql
时,使用
mysql
-
u
root
-
p
命令一直报错"ERROR 2...
赞
踩
article
mysql
登录
错误代码
1045
(
28000
)
解决办法
_
28000
【
1045
】...
1、关闭
mysql
服务,备份安装目录下的data文件夹的用户所用数据库(一般db
_
开头的),bin目录同级2、修改my...
赞
踩
article
mysql
ERROR 1045 (28000): 错误解决办法_
error
1045(28000)...
我设置数据库允许远程连接后;别人机子练我就报这个错,通过解决办法我推断是服务需要重启设置;window下1.打开数据库安...
赞
踩
article
Springboot计算机毕业
设计
基于
uni
-
app
的
外卖微信小
程序
【附源码】开题+论文+mysql...
本文详细描述了一项
基于
uni
-
app
技术开发外卖微信小
程序
的
研究,涉及商家和用户管理、菜品信息展示、数据安全及跨平台兼容...
赞
踩
article
医院
门诊预约挂号系统(
JAVA
,
JSP
,
SERVLET
,
MYSQL
)_
医院
预约挂号
系统管理员
,医生,...
医院
门诊预约挂号系统(
JAVA
,
JSP
,
SERVLET
,
MYSQL
)(毕业论文12000字以上,共42页,程序代码,My...
赞
踩
article
67.
医院
预约
挂号
系统
设计
与实现|
jsp
+
Mysql
+
Java
+ Tomcat(可运行源码(含数据...
本文介绍了基于JSP和
Mysql
的
医院
预约
挂号
系统
开发
,包括需求分析、
系统
设计
、
数据库
设计
、功能模块和部署流程。
系统
实现...
赞
踩
相关标签
java
面试
mysql
数据库
深入理解隔离性
Read View
RR与RC的本质区别
新手向
详细讲解
mysql read-view
数据结构与算法
MVCC
READ VIEW
MySQL
mysql 8 初始化失败
linux下mysql8.0端口号为0
mysql 8.0 报1045
后端