IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 快速学习mysql inndb底层存储原理 -> 正文阅读

[大数据]快速学习mysql inndb底层存储原理

首先来看看mysql的体系架构:
在这里插入图片描述
从图中来开,主要分为了几大部分

  1. 网络层连接
  2. 服务层 mysql server
  3. 存储引擎层
  4. 系统文件层

我们来看一下 msyql运行的机制
在这里插入图片描述
再看一下mysql官网给出的inndb存储架构图
在这里插入图片描述

看了很多我们可以通过查询和更新来将这些组件串联起来
在这里插入图片描述
查询:

  1. 查询进入server端,依次进入 连接器 分析器 优化器 执行器
    a. 连接器: 进行管理连接,权限验证
    b. 分析器:
    i. 词法解析:sql语句,识别出里面的字符是干什么的
    ii. 语法解析:输入的sql语句是否合法
    c. 优化器:
    i. 决定使用哪个索引
    ii. join的时候,表的连接顺序
    d. 执行器:
    i. 执行sql语句返回给客户端
  2. 根据表id和数据页号,通过adaptive hash index 查找缓存hash表
    a. hash表:key为 表空间id+数据页号,value为 缓存页面地址值
  3. 如果查询到了,就直接返回,查询不到,需要到磁盘文件中查找
  4. 磁盘文件会申请空闲描述数据找到对应的缓存页,加载磁盘数据到缓存页,空闲的缓存页,放入free 链表中
    a. 其中有free链表描述数据
  5. 其中缓存到缓存页中之后,并且把这个数据加入到一个冷数据的头部 lru链表
    a. lru链表:默认7:3 热数据:冷数据的比例。
    b. lru链表是一直维护的,磁盘中的文件通过一个线程一直维护这个冷热链表。
    c. 一看到冷热,就知道inndb为了冷热分离,特意加了一个lru链表,将热点数据放到链表的头部。
  6. 最后将查询到的结果进行返回

修改数据:

  1. server端修改数据
  2. 先将旧的数据写入到undo log中
    a. 数据库事务开始之前,会将要修改的记录存放到undo log中,当事务回滚时可以undo日志,撤销事务提交
    b. undolog是逻辑日志,可以理解为sql语句,例如插入一条记录 insert,它记录相反的操作 delete一条记录
  3. 在缓存页修改的记录,同时会记录到 flush链表
    a. flush链表:每次修改缓存页之后,创建一个存储脏页的链表,凡是修改过的缓存页都加入到这个链表中
    b. 不着急立即把修改同步到磁盘中,而是通过flush链表开启一个线程异步进行刷新
  4. 同时 commit写会进入到 redo日志
    a. redo日志是是innodb独有的
    b. 他是一个物理日志,如果服务异常重启了,可以根据redo log进行重做
    c. redo log是一个环形数组形式,写满后容易覆盖
    d. 有一个参数 innodb_flush_log_at_trx_commit:
    i. 1(默认值):每次事务提交执行redo Buffer->OS cache-> flush cache to disk,最安全,但是性能最差
    ii. 0:没提交redo buffer ->os cache ->flush cache to disk。可能丢失一秒的数据
    iii. 2:每次事务提交执行 先由redo buffer->os cache,然后由后台线程每隔1s执行OS cache->flush cache to disk。
  5. innodb 提交事务类似于两阶段提交事务:
    a. redo log刷盘,binlog刷盘,redo log commit
    b. binlog:mysql server自己的文件
    i. 参数: sync_binlog:设置成1,每次事务提交都持久化到磁盘
    ii. binlog的两个重要使用场景
    1. 主从复制:在主库开启binlog功能,这样主库就可以把binlog传递给从库,从库拿到binlog后实现数据恢复达到主从一致性
    2. 数据恢复:通过mysql binlog工具来进行恢复数据
  6. 对比一下redolog vs binlog
    a. 位置:
    i. redolog 数据innodb存储引擎层
    ii. binlog属于mysql server自带功能
    b. 功能:
    i. redolog 物理日志,记录了某个数据页做了什么修改
    ii. binLog:是逻辑日志,记录的是语句的原始逻辑,比如给id=2这行字段加1
    c. 写
    i. redo log 内部是一个环形链表,循环写,空间固定会用完覆盖
    ii. binlog是追加写,写到一定大小后就会切换到下一个,不会覆盖
    d. 用处
    i. redo log作为服务器异常宕机后数据自动恢复使用
    ii. binlog 主从复制和数据恢复

mysql中的物理概念:
一个组数据区->包含256个数据区(extent)->一个数据区->包含64个数据页->一个数据页也就是16k->数据页中由数据行
在这里插入图片描述

Innodb VS MyISAM

InnoDB和MyISAM是使用MySQL时最常用的两种引擎类型,我们重点来看下两者区别。

  1. 事务和外键
  • InnoDB支持事务和外键,具有安全性和完整性,适合大量insert或update操作
  • MyISAM不支持事务和外键,它提供高速存储和检索,适合大量的select查询操作
  1. 锁机制
  • InnoDB支持行级锁,锁定指定记录。基于索引来加锁实现。
  • MyISAM支持表级锁,锁定整张表。
  1. 索引结构
  • InnoDB使用聚集索引(聚簇索引),索引和记录在一起存储,既缓存索引,也缓存记录。
  • MyISAM使用非聚集索引(非聚簇索引),索引和记录分开。
  1. 并发处理能力
  • MyISAM使用表锁,会导致写操作并发率低,读之间并不阻塞,读写阻塞。
  • InnoDB读写阻塞可以与隔离级别有关,可以采用多版本并发控制(MVCC)来支持高并发
  1. 存储文件
  • InnoDB表对应两个文件,一个.frm表结构文件,一个.ibd数据文件。InnoDB表最大支持64TB;
  • MyISAM表对应三个文件,一个.frm表结构文件,一个MYD表数据文件,一个.MYI索引文件。从MySQL5.0开始默认限制是256TBInnoDB和MyISAM是使用MySQL时最常用的两种引擎类型,我们重点来看下两者区别。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:36:32  更:2022-02-28 15:37:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:34:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码