mysql innodb知识记录

news2024/11/29 20:33:02

官方文档

官网架构图

innodb 特性

内存

buffer pool

在这里插入图片描述
采用优化后的LRU算法,

  • 3/8 of the buffer pool is devoted to the old sublist.
  • The midpoint of the list is the boundary where the tail of the new sublist meets the head of the old sublist.
  • When InnoDB reads a page into the buffer pool, it initially inserts it at the midpoint (the head of the old sublist). A page can be read because it is required for a user-initiated operation such as an SQL query, or as part of a read-ahead operation performed automatically by InnoDB.
  • Accessing a page in the old sublist makes it “young”, moving it to the head of the new sublist. If the page was read because it was required by a user-initiated operation, the first access occurs immediately and the page is made young. If the page was read due to a read-ahead operation, the first access does not occur immediately and might not occur at all before the page is evicted.
  • As the database operates, pages in the buffer pool that are not accessed “age” by moving toward the tail of the list. Pages in both the new and old sublists age as other pages are made new. Pages in the old sublist also age as pages are inserted at the midpoint. Eventually, a page that remains unused reaches the tail of the old sublist and is evicted.

自适应哈希索引

change buffer

在这里插入图片描述

log buffer

redo log buffer

redo log记录的是 对数据页个改动

Insert buffer

数据写入&读取数据

  • 对row来说,有mvcc(一行记录多个版本),同步大内存中也是如此

磁盘

如何保证数据写入成功

  • Doublewrite

doublewrite 由两部分组成:1 doublewriterbuffer 位于内存,大小2M; 2 共享表空间磁盘上,2个连续的区(128页)
脏页预先复制到doublewrite buffer,然后分两次写盘,每次1M写入共享表空间物理磁盘。doublewriter 写完之后,再写入各个表空间

  • redolog

redolog 记录的是对数据页的改动,如果数据页损坏,redolog不能恢复数据,由doublewriter保证数据页完整

  • checkpoint LSN

内存页,redolog、磁盘页军用LSN值,用于判断内存页是否已完成同步

redolog

  • redolog
    • lsn
    • innodb引擎至少有一个重做日志组,每组至少两个文件
    • innodb1.2 之前最大4G,1.2 之后扩大到512G
    • log block 重做日志按扇区写入,每次 512KB,因扇区是最小写入单位,不需要doublewriter

逻辑存储结构

  • 表空间
    • 见架构图
    • 数据段
    • 索引段
    • 回滚段
    • 连续页组成,每个1M,页16KB(连续64页)
    • 每次申请4-5个区
    • 默认大小16KB ,若设置完成不可修改,除非数据重放
    • 页分类
      • 数据页
      • undo 页
      • 系统页
      • 事务数据页
      • 插入缓冲位图
      • 插入缓冲空闲页
      • 未压缩二进制大对像页
      • 压缩二进制大对象页
    • 页结构
      • file header 大小:38B,LSN、页的前后指针、实际存储空间
      • page header 大小:56B,页状态信息、已删除记录数、记录数、最后插入位置、当前页最大事务ID、页在索引的位置
      • infimun+supremum records 页创建时创建,不会被删除。页中主键最大、最小值
      • User records B+树索引组织
      • free space 空闲表空间,链表结构,记录删除后会加入到链表中
      • page dictionary 记录相对位置
      • fill trail 监测页是否完整写入磁盘

索引

  • 聚集索引
  • 辅助索引
  • 全文索引

  • 行级锁
    • 共享锁 S
    • 排它锁 X
  • 表级别锁
    • 意向共享锁 IS
    • 意向排它锁 IX

X 不兼容任何锁,S、IX不兼容

  • infomation schema三张表
    • innodb_trx 表
      • trx_id 事务id
      • trx_state 事务状态
      • trx_started 事务开始时间
      • trx_requested_lock_id 等待事务的锁id, 当 trx_state 为lock wait时有值
      • trx_wait_started 事务等待开始时间
      • trx_weight 事务权重
      • trx_mysql_thread_id 线程id
      • trx_query 事务运行的 sql 语句
    • innodb_locks
      • lock_id 锁id
      • lock_trx_id 事务id
      • lock_mode 锁模式
      • lock_type 锁类型)表、行
      • lock_table 锁住的表
      • lock_index 锁住的索引
      • lock_space 锁对象的space_id
      • lock_page 锁定叶数量,表锁为null
      • lock_rec 锁定记录 表锁为null
      • lock_data 锁定主键值 表锁为null
    • innodb_lock_waits
      • requesting_trx_id 申请锁事务id
      • requesting_lock_id 申请锁id
      • blocking_lock_id 阻塞锁id
      • blocking_trx_id 阻塞事务id
  • 一致性非锁定读
    • read_commit 读取被锁定行最新一份快照
    • repeatable_read 事务开始数据行版本
  • 一致性锁定度
    • select 。。。 for update (X锁)
    • select 。。。 lock in share mode (S锁)
  • 自增锁
  • 行锁3种算法
    • record_lcok 记录锁
    • gap_lock 间隙锁,不包含自身
    • next_key lock :包含自身+范围

事务

  • 实现
    • redolog 持久化
    • undo log
      • Insert undo log
      • update undo log
    • 事务隔离级别
      • reade uncommit
      • reade commite
      • reapteable read
      • serializable

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

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

相关文章

C语言-Makefile

Makefile 什么是make? make 是个命令,是个可执行程序,用来解析 Makefile 文件的命令这个命令存放在 /usr/bin/ 什么是 makefile? makefile 是个文件,这个文件中描述了我们程序的编译规则咱们执行 make 命令的时候, m…

[DroneCAN]CAN-Convertor控制CAN电调电机

简介 CAN电调电机是一类通过CAN协议控制转速的电调电机,和传统的PWM电调电机不同在于,CAN协议有网络性和抗干扰性,因此其性能比PWM更好,占用的端口数也会更少。在apm或者px4等基于dronecan的飞控来说,想要控制第三方的…

【CMU 15-445】Lecture 10: Sorting Aggregations Algorithms 学习笔记

Sorting & Aggregations Algorithms SortingTop-N Heap SortExternal Merge Sort2-WAY External Merge SortK-WAY External Merge SortDouble Buffering Optimization AggregationsSortingHashing 本节课主要介绍的是数据库系统中的排序算法以及聚合算法 Sorting 排序算法…

大模型自定义算子优化方案学习笔记:CUDA算子定义、算子编译、正反向梯度实现

01算子优化的意义 随着大模型应用的普及以及算力紧缺,下一步对于计算性能的追求一定是技术的核心方向。因为目前大模型的计算逻辑是由一个个独立的算子或者说OP正反向求导实现的,底层往往调用的是GPU提供的CUDA的驱动程序。如果不能对于整个计算过程学习…

LearnDash LMS ProPanel在线学习系统课程创作者的分析工具

点击阅读LearnDash LMS ProPanel在线学习系统课程创作者的分析工具原文 LearnDash LMS ProPanel在线学习系统课程创作者的分析工具通过整合报告和作业管理来增强您的 LearnDash 管理体验,使您能够发送特定于课程的通信,并显示课程的实时活动&#xff01…

分类信息网商业运营版源码系统:适合各类行业分类站点建站 带安装部署教程

随着互联网的快速发展,信息分类网站在各个行业中得到了广泛应用。为了满足不同行业的需求,罗峰给大家分享一款适合各类行业分类站点建站的商业运营版源码系统。该系统旨在提供一套完整的解决方案,帮助用户快速搭建自己的分类信息网站&#xf…

【最新版】在WSL上运行 Linux GUI (图形用户界面)应用(Gnome 文本编辑器、GIMP、Nautilus、VLC、X11 应用)

文章目录 一、 安装WSL0. 先决条件1. 全新安装2. 现有 WSL 安装3. 注意事项 二、运行 Linux GUI 应用1. 更新发行版中的包2. 安装 Gnome 文本编辑器启动 3. 安装 GIMP启动 4. 安装 Nautilus启动 5. 安装 VLC启动 6. 安装 X11 应用 适用于 Linux 的 Windows 子系统 (WSL) 现在支…

Javaweb考前复习冲刺(不断更新版)

Javaweb考前复习冲刺 第一章: JavaWeb 入门 JavaWeb是指:以Java作为后台语言的项目工程。 javaweb项目创建的过程: 首先集成Tomcat服务器环境新建dynamic web project部署工程运行 路由含义: ​ http://localhost:8080/工程…

Redis 主从集群 —— 超详细操作演示!

五、Redis 主从集群 五、Redis 主从集群5.1 主从集群搭建5.1.1、伪集群搭建与配置5.1.2、分级管理5.1.3、容灾冷处理 5.2 主从复制原理5.2.1、主从复制原理5.2.2、数据同步演变过程 5.3 哨兵机制实现5.3.1 简介5.3.2 Redis高可用集群搭建5.3.3 Redis高可用集群的启动5.3.4 Sent…

ubuntu创建apt-mirror本地仓库

首先创建apt-mirror的服务端,也就是存储所有apt-get下载的文件和依赖。大约需要300G,预留400G左右空间就可以开始了。 安装ubuntu省略,用的是ubuntu202204 ubuntu挂载硬盘(不需要的可以跳过): #下载挂载工具 sudo apt…

Java并发(十九)----Monitor原理及Synchronized原理

1、Java 对象头 以 32 位虚拟机为例 普通对象 |--------------------------------------------------------------| | Object Header (64 bits) | |------------------------------------|-------------------------| | Mark W…

序列生成模型(一):序列概率模型

文章目录 前言1. 序列数据2. 序列数据的潜在规律3. 序列概率模型的两个基本问题 一、序列概率模型1. 理论基础序列的概率分解自回归生成模型 2. 序列生成 前言 深度学习在处理序列数据方面取得了巨大的成功,尤其是在自然语言处理领域。序列数据可以是文本、声音、视…

pytorch和pytorchvision安装

参考https://blog.csdn.net/2301_76863102/article/details/129369549 https://blog.csdn.net/weixin_43798572/article/details/123122477 查看我的版本 右键,nvivdia控制面板,帮助,系统信息 驱动程序版本号为528.49 更新很快的 CUDA版本…

stm32F4——BEEP与按键的实例使用

stm32F4——BEEP与按键的实例使用 蜂鸣器和按键的实质都是GPIO的使用,所以基本原理就不介绍啦,基本寄存器其实都是GPIO的高低电平的赋值,可以参考stm32——LEDGPIO的详细介绍 文章目录 stm32F4——BEEP与按键的实例使用一、BEEP二、 KEY三、通…

MySQL数据库 DML

目录 DML概述 添加数据 修改数据 删除数据 DML概述 DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。 添加数据(工NSERT)修改数据(UPDATE)删除数据(DELETE) 添加数据 (1)给指定字段添加数据 INSERT …

Epic 安装失败,错误代码SUPQR1612,必要的先决条件安装失败,弹窗CD-ROM

错误记录 并且弹出来这个窗口the feature you are trying to use is on a CD-ROM or other removable disk that is not available. 让我寻找这个msi文件 正在想办法解决 如果有人能解决 麻烦告知评论区!

网络安全事件分级指南

文章目录 一、特别重大网络安全事件符合下列情形之一的,为特别重大网络安全事件:通常情况下,满足下列条件之一的,可判别为特别重大网络安全事件: 二、重大网络安全事件符合下列情形之一且未达到特别重大网络安全事件的…

C++软件调试与异常排查技术从入门到精通学习路线分享

目录 1、概述 2、全面了解引发C软件异常的常见原因 3、熟练掌握排查C软件异常的常见手段与方法 3.1、IDE调试 3.2、添加打印日志 3.3、分块注释代码 3.4、数据断点 3.5、历史版本比对法 3.6、Windbg静态分析与动态调试 3.7、使用IDA查看汇编代码 3.8、使用常用工具分…

【Linux】cp问题,生产者消费者问题代码实现

文章目录 前言一、 BlockQueue.hpp(阻塞队列)二、main.cpp 前言 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用…

将博客搬至微信公众号了

一、博客搬家通知 各位码友们好,大家是不是基本很少看 CSDN 了呢?平时开发是不都依靠着 chatGPT 来解决工作中的技术问题了,不过我觉得在工作中的使用场景各式各样的,具体问题还得自己具体去梳理逻辑,再考虑用什么样的…