mysql innodb知识记录

官方文档

官网架构图

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

地牢边缘 DUNGEON LIMBUS中文免安装版

​《地牢边缘》是一款点阵图形式的像素风经典迷宫探索类游戏。玩家需要在游戏中收集多种装备,随机生成的无限地下城。在生死之际遇见的迷之铁匠和管理复活之村的年轻女性。为了找回遗失的记忆,进入更深的地下城。玩家还可以发展村落以及进化武器的多样化…

亚信安慧AntDB数据库助力智慧高速建设

随着新型智慧交通业务的迅速发展,各地高速公路在管控、收费和监测方面的数据管理变得至关重要。智慧公路信息化建设已成为高速公路建设的核心。AntDB数据库在某省级客户中发挥关键作用,帮助构建协同共享、高效的统一智慧管理平台,为高速公路的…

javascript 数组处理的两个利器: `forEach` 和 `map`(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

【AI基础设施】智算场景的资源管理系统与未来展望

高性能计算与智算场景 首先澄清两个概念,高性能计算与智算场景,高性能计算主要是面向天气预测、生物计算、材料计算等场景,而最近几年很火的智算主要是面向AI场景的计算,如语音识别、图像识别、自动驾驶等场景,我们可…

算法学习——栈与队列

栈与队列 栈与队列理论基础用栈实现队列思路代码 用队列实现栈思路代码 删除字符串中的所有相邻重复项思路代码 有效的括号思路代码 逆波兰表达式求值思路代码 滑动窗口最大值思路代码未完待续 前 K 个高频元素思路代码拓展 总结栈在系统中的应用括号匹配问题字符串去重问题逆波…

Linux常用网络指令

网络参数设定使用的指令 手动/自动设定与启动/关闭 IP 参数&#xff1a;ifconfig, ifup, ifdown ifconfig ifconfig常用于修改网络配置以及查看网络参数的指令 [rootwww ~]# ifconfig {interface} {up|down} < 观察与启动接口 [rootwww ~]# ifconfig interface {options…

6.s081操作系统Lab4: trap

文章目录 chapter 4概览4.1 CPU trap流程使用寄存器如果cpu想处理1个trap 4.2 用户态引发的trap4.2.1 uservec4.2.2 usertrap4.2.3 usertrapret和userretusertrapretuserret Lab4Backtrace (moderate)Alarm (hard) chapter 4 概览 trap的场景&#xff1a;系统调用&#xff0c…

CUDA C:线程、线程块与线程格

相关阅读 CUDA Chttps://blog.csdn.net/weixin_45791458/category_12530616.html?spm1001.2014.3001.5482 第一百篇博客&#xff0c;写点不一样的。 当核函数在主机端被调用时&#xff0c;它会被转移到设备端执行&#xff0c;此时设备会根据核函数的调用格式产生对应的线程(…

被我们忽略的HttpSession线程安全问题

1. 背景 最近在读《Java concurrency in practice》(Java并发实战)&#xff0c;其中1.4节提到了Java web的线程安全问题时有如下一段话&#xff1a; Servlets and JPSs, as well as servlet filters and objects stored in scoped containers like ServletContext and HttpSe…

第一个程序(STM32F103点灯)

点亮LED 看原理图确定控制LED的引脚看主芯片手册确定如何设置/控制引脚写程序 LED有很多种&#xff0c;像插脚的&#xff0c;贴片的。 它们长得完全不一样&#xff0c;因此我们在原理图中将它抽象出来。 嵌入式系统中&#xff0c;一个LED的电阻非常低&#xff0c;I U/R&…

Java 图片文件上传下载处理

Java 图片文件上传下载处理 下载 做这玩意给我恶心坏了 下载 直接访问上传的路径就可以下载图片了。但是我们往往会包一层接口&#xff0c;以流的方式读取 url 的内容然后返回给前端&#xff0c;这么做的优点是&#xff1a; 内网域名转外网域名&#xff0c;做业务校验并且让用…

Kafka 数据乱序

每个broker队列最多能缓存5个没有应答的请求&#xff1a; 发送数据1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5。发送到3的时候没有应答成功&#xff0c;要重发&#xff0c;结果4先过来了&#xff0c;就导致乱序。 解决&#xff1a;开启幂等性 max.in.flight.req…

IDA pro软件 如何修改.exe小程序打开对话框显示的文字?

环境: Win10 专业版 IDA pro Version 7.5.201028 .exe小程序 问题描述: IDA pro软件 如何修改.exe小程序打开对话框显示的文字? 解决方案: 一、在IDA Python脚本中编写代码来修改.rdata段中的静态字符串可以使用以下示例代码作为起点(未成功) import idc# 定义要修…

还在为学MyBatis发愁?史上最全,一篇文章带你学习MyBatis

文章目录 前言一、&#x1f4d6;MyBatis简介1.Mybatis历史2.MyBatis特性3.对比&#xff08;其他持久化层技术&#xff09; 二、&#x1f4e3;搭建MyBatis1.开发环境2.创建maven工程3.创建MyBatis核心配置文件4.创建mapper接口5.创建MyBatis的映射文件6.通过junit测试功能7.加入…

PowerShell实战:Get-Content命令使用详解

目录 一、Get-Content介绍 二、语法格式 三、参数详解 四、使用案例 4.1 获取文件内容 4.2 获取文件前三行内容 4.3 获取文件最后三行内容 4.4通过管道方式获取最后两行内容 4.5使用逗号作为分隔符 4.6 Filter方式读取多个文件 4.7 Include方式读取多个文件 一、Get-Content介绍…

达索系统SOLIDWORKS 2024 云服务新功能

“云服务 是基于互联网的相关服务的增加、使用和交互模式&#xff0c;通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。 云是网络、互联网的一种比喻说法。过去在图中往往用云来表示电信网&#xff0c;后来也用来表示互联网和底层基础设施的抽象。云服务指通过网络以…

Leetcode 2132. 用邮票贴满网格图(Java + 两次一维前缀和 + 二维差分)

Leetcode 2132. 用邮票贴满网格图&#xff08;Java 两次一维前缀和 二维差分&#xff09; 题目 给你一个 m x n 的二进制矩阵 grid &#xff0c;每个格子要么为 0 &#xff08;空&#xff09;要么为 1 &#xff08;被占据&#xff09;。给你邮票的尺寸为 stampHeight x sta…

基于PaddleOCR搭建身份证识别web api接口

前言 通过 这篇文章【基于PaddleOCR的DBNet神经网络实现全网最快最准的身份证识别模型】开发的身份证识别模型&#xff0c;还无法进行部署应用&#xff0c;这篇文章就已经开发好的代码如何部署&#xff0c;并如何通过api的接口进行访问进行讲解。 项目部署 以windows系统为例…

想做新程序员?马上用 GPT-4 编程,一切我们都替你搞好了!

// 打不过就加入。与其担心被 GPT-4 取代&#xff0c;不如现在就学习驾驭它。 &#xff08;GPT-3.5 和其他模型都不用怕&#xff0c;它们都不行&#xff0c;谁用谁知道……除了 Claude 我们还在测试中&#xff09; 文末有一键加入方法&#xff0c;国内用户也能无障碍使用—…

提升 API 可靠性的五种方法

API 在我们的数字世界中发挥着关键的作用&#xff0c;使各种不同的应用能够相互通信。然而&#xff0c;这些 API 的可靠性是保证依赖它们的应用程序功能正常、性能稳定的关键因素。本文&#xff0c;我们将探讨提高 API 可靠性的五种主要策略。 1.全面测试 要确保 API 的可靠性…