Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >mysql体系结构

mysql体系结构

原创
作者头像
萧晚歌
修改于 2021-11-18 07:58:30
修改于 2021-11-18 07:58:30
1.1K00
代码可运行
举报
文章被收录于专栏:linux技术分享linux技术分享
运行总次数:0
代码可运行

mysql8.0体系结构

图来自网络
图来自网络

图上看mysql服务是一个c/s架构 它是用c和c++开发的

Connectors 端

可以通过,各种各样的客户端,链接mysql服务器 如mysql命令,各种apl等

server端

又分为很多模块

链接层

1提供链接协议 TCP/IP 本地的socket

2用户名密码验证(通过授权表做的验证数据库一启动,会把授权表加载到内存中 mysql.user mysql.db mysql.table_priv mysql.column_priv)

3提供链接线程

查看链接线程 show processlist;

查看后台所有线程 select * from performance_schema.threads\G

sql层

sql线程接收链接线程

预处理(lex) 语法,语义(语句是什么类型的),权限(访问的库或者表有没有权限) 检查

解析(yacc) 生成解析树 (ast抽象语法树)

优化 逻辑优化 基于关系代数的等价转换,在物理优化 参考统计信息(描述了,数据的分布,索引的一些状态,粗略记录表里有多少行)以及一些优化器算法,代价评估,生成执行计划(explain)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
统计信息说明
统计信息记录的是 表的状态, 如表名 数据行 数据分布情况 索引状态信息...
统计信息是mysql定期收集而来 通过一些参数指标 不是实时收集的
mysql.innodb_index_stats
mysql.innodb_table_stats
#问题 一条sql语句昨天运行的好好的(0.01) ,突然变慢了(2min)? 为什么
由于统计信息不准确造成的,不走索引造成的
可以通过命令强制重新收集 也有参数控制
analyze teble 库名.表名;
或者 optimize table 库名.表名; #命令锁表 谨慎使用

引擎层

io线程接收sql线程

mysql和磁盘打交道的类似于linux的文件系统

图来自mysql官网
图来自mysql官网

innodb存储引擎分为内存结构和磁盘结构

存储的宏观结构

在mysql中一个数据库,就在系统中就是一个目录

在mysql中一个表 对应操作系统中的一个.ibd文件(8.0)

在操作系统可以通过ibd2sdi 文件名 可以查看文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
表中记录的 数据行 + 元数据(表属性,表的列(列属性),表名)
mysql8.0表的存储方式 每张表的数据都存储在ibd文件中
mysql5.7表的存储方式
数据行 ibd文件
源数据 frm +ibdata1(总体) 文件
Online DDL 的时候会更加快速

8.0新特性了解

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
metdata 结构变化
5.7版本问题
两套数据字典信息server层 .frm innodb数据字典
DDL无法原子化 (删除两张表的时候,不是一起执行的)
frm和innodb层会出现不一致
并发处理需要小心处理(MDL,dict_sys::mutex,dict_sys::rw_lock)
崩溃无法恢复
8.0新特性
支持事务性DDL,崩溃可以回滚,保证一致,
只保留一份数据字典信息,取消了frm数据字典
数据都放在的InnoDB表中
采用套锁机制,管理数据字典的并发访问(DML)
全新的plugin支持
8.0.17后加入clone plugin,更好的支持MGR InnoDB Clustre的节点管理
安全的加密方式改变
改变加密方式为caching_sha2_password
SSL 将支持到TLSv1.3版本.
用户管理及认证方式改变
改变授权方式
加入role角色权限
添加更多权限
cache&&Buffer的变化
取消了Query Cache
缓存的是查询的结果 会把你查询的语句做一个hash 结果做成key 如果你查询条件增加了 缓存就不会命中
mysql的查询缓存并非缓存执行计划,而是查询及其结果集,这就意味着只有相同的查询操作才能命中缓存,隐藏mysql查询命中率很低
oracle 缓存的是执行计划 减少了解过程.

mysql实例

mysqld守护进程 + Master Threa + Worker Threads + 预分配的内存

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql的内存结构
global buffers(全局)
innodb_buffer_pool(可以设置物理内存的%50-%75):数据缓冲区
innodb_log_buffer:日志缓冲区
key_buffer
table_cache
session buffers(每个会话独立使用)
read_buffer
read_fnd_buffer
sort buffer
join buffer
tmp table
binlog_cache

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql中的线程
master thread    作用核心后台进程,负责全局管理数据刷新和数据一致性处理
io thread        负责和磁盘io交互 (read io write io insert buffer log io) 相关参数inndbo_read_io_threads, inndbo_write_io_threads
Purge thread     作用 UNDO页回收 参数 innodb_purge_threads
page cleaner     作用 脏页刷新线程 默认1 最大64 参数 innodb_page_cleaners
other threads

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL 8.0 数据字典有哪些变化?
墨墨导读:MySQL8.0 数据字典(Data Dictionary)也在进化中。MyISAM系统表全部换成InnoDB表 ,支持原子DDL。复杂度增加了。考虑过是否跟业务数据库有资源抢夺的现象,这些都是实际使用中需要观察关注的问题。
数据和云
2020/06/17
2.3K0
MySQL8功能详解——数据字典
MySQL与其它的数据库一样,需要一个储存元数据的地方。在MySQL8之前,它们以各种文件的形式保存在不同的地方,例如 .FRM , .TRG ,.TRN等等。随着时间的推移,这些文件逐渐成为了各种环境中的瓶颈。MySQL8推出了支持事务的数据字典。
MySQLSE
2020/09/28
1.1K0
MySQL8功能详解——数据字典
MySQL 8.0新特性: 数据字典
目前MySQL 8.0最新版本为8.0.23版本,针对8.0的新特性,从春节前开始做了一些相关学习和测试,后续会不阶段的分享一些8.0的新特性,供大家一起参考和学习;
SEian.G
2021/03/03
2.4K0
MySQL8.0之数据字典
MySQL 8.0 将数据库元信息都存放于InnoDB存储引擎表中,在之前版本的MySQL中,数据字典不仅仅存放于特定的存储引擎表中,还存放于元数据文件、非事务性存储引擎表中。本文将会介绍MySQL 8.0对数据字典的改进,以及改进带来的好处、影响以及局限性。
沃趣科技
2018/05/15
3.4K1
MySQL8.0之数据字典
MySQL 8.0 information_schema系统库的改进
在表的数量很多时,每次查询I_S会从文件系统中读取每个单独的FRM文件,使用更多的CPU周期来打开表并准备相关的内存数据结构
星哥玩云
2022/08/18
5880
MySQL 8.0 information_schema系统库的改进
MySQL 8.0新特性之原子DDL
MySQL 8.0 开始支持原⼦ DDL(atomic DDL),数据字典的更新,存储引擎操作,写⼆进制日志结合成了一个事务。在没有原⼦DDL之前,DROP TABLE test1,test2;如遇到server crash,可能会有test1被drop了,test2没有被drop掉。下面来看下在MySQL 8.0之前和MySQL 8.0 数据字典的区别。
星哥玩云
2022/08/17
5010
MySQL 8.0新特性之原子DDL
你真的了解MySQL 8.0 数据字典吗?
作者:叶盛,腾讯云数据库TDSQL开发工程师,从事数据库内核开发工作。 在MySQL中,数据字典信息内容包括表结构、数据库名或表名、字段的数据类型、视图、索引、表字段信息、存储过程、触发器等内容。可是包含这些元数据的数据字典不仅仅存在于数据库系统表中(information_schema,mysql,sys),还存在于server层和InnoDB存储引擎中的部分文件里,比如每个表都有一个对应的.frm文件来保存表结构的信息,.opt文件用来用来记录每个库的字符等信息,.TRN和.TRG文件用来存放触发器的
腾讯云数据库 TencentDB
2020/09/04
1.3K0
MySQL-8.0 | 数据字典最强解读
数据字典(Data Dictionary)中存储了诸多数据库的元数据信息如图1所示,包括基本Database, table, index, column, function, trigger, procedure,privilege等;以及与存储引擎相关的元数据,如InnoDB的tablespace, table_id, index_id等。MySQL-8.0在数据字典上进行了诸多优化,本文将对其进行逐一介绍。
数据和云
2019/05/13
4.1K0
深度解读 MySQL 8.0 数据字典重构:源码解析与实践
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
喵手
2024/10/29
2340
深度解读 MySQL 8.0 数据字典重构:源码解析与实践
MySQL 8.0数据字典有什么变化
从MySQL 8.0开始,采用独立表空间模式的每个InnoDB表只有一个 .ibd 表空间文件,而不再有 .frm 文件了。为了实现DDL的原子性,InnoDB直接把元数据存储在表空间文件中,需要的话,可是使用 ibd2sdi 工具从中读取,例如:
老叶茶馆
2022/12/02
9930
详解MySQL-8.0数据字典
提示:公众号展示代码会自动折行,建议横屏阅读 ---- 1. 引言 ---- 数据字典(Data Dictionary)中存储了诸多数据库的元数据信息如图1所示,包括基本Database, table, index, column, function, trigger, procedure,privilege等;以及与存储引擎相关的元数据,如InnoDB的tablespace, table_id, index_id等。MySQL-8.0在数据字典上进行了诸多优化,本文将对其进行逐一介绍。 图1 2.
腾讯数据库技术
2019/05/16
6.9K0
详解MySQL-8.0数据字典
mysql的三层体系结构
第2层sql处理层(SQL Layer):主要有SQL Interface、Parser、Optimizer、Cache和Buffer
Kami米雅
2021/12/10
1.3K0
MySQL 8.0新特性 — 事务性数据字典与原子DDL
事务性数据字典与原子DDL,是MySQL 8.0推出的两个非常重要的新特性,之所以将这两个新特性放在一起,是因为两者密切相关,事务性数据字典是前提,原子DDL是一个重要应用场景。
brightdeng@DBA
2020/08/17
1.8K0
MySQL 8.0新特性 — 事务性数据字典与原子DDL
【我在拉勾训练营学技术】Mysql 架构原理
mysql 数据库作为现在互联网企业首选的数据库,我们程序员就应该对它多一些了解,我在拉勾训练营学到第五阶段啦,了解了mysql 整体架构,记录下来。
程序员爱酸奶
2021/03/21
5840
MySQL8.0原子DDL语法
原子DDL语句将数据字典更新、存储引擎操作和与DDL操作相关联的二进制日志写入合并到单个原子操作中。该操作要么提交,对数据字典、存储引擎和二进制日志保留适用的更改,要么回滚。
AsiaYe
2020/12/31
6700
来,看看MySQL 5.6, 5.7, 8.0的新特性
对于MySQL的历史,相信很多人早已耳熟能详,这里就不要赘述。下面仅从产品特性的角度梳理其发展过程中的里程碑事件。
星哥玩云
2022/08/17
1.7K0
来,看看MySQL 5.6, 5.7, 8.0的新特性
MySQL 8.0 Atomic DDL
背景 MySQL 8.0 DDL 是一个复杂的过程,涉及比较多的模块,例如:MDL 锁,表定义缓存,行格式,Row Log,DDL Log,online 属性,表空间物理文件操作等。本文主要通过与5.
腾讯数据库技术
2023/01/30
1.3K0
MySQL 8.0 Atomic DDL
MySQL - 体系结构初探
MySQL 从最初的 1.0、3.1 到后来的 5.x ,到今天的8.x,发生了各种各样的变化。
小小工匠
2021/08/17
4550
MySQL体系结构与参数文件及查询优化器详解
MySQL是由SQL接口,解析器,优化器,缓存,存储引擎组成的(SQL Interface、 Parser、 Optimizer、Caches&Buffers、Pluggable Storage Engines)
星哥玩云
2022/08/17
7850
MySQL体系结构与参数文件及查询优化器详解
MySQL 8.0.19亿级数据如何秒速增加字段?
今天主要介绍一下MySQL 8.0.19 instant add column的新特性,基于亿级数据秒速增加字段,下面一起来看看吧~
IT大咖说
2021/03/14
8.5K0
相关推荐
MySQL 8.0 数据字典有哪些变化?
更多 >
LV.2
运维工程师
作者相关精选
换一批
交个朋友
加入[数据] 腾讯云技术交流站
获取数据实战干货 共享技术经验心得
加入数据技术工作实战群
获取实战干货 交流技术经验
加入[数据库] 腾讯云官方技术交流站
数据库问题秒解答 分享实践经验
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验