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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ensp创建配置环境,实现全网互访

文章目录 创建配置环境,实现全网互访配置步骤接入层交换机(sw4、sw5)划分vlan汇聚层交换机(sw2、sw3)配置ip地址作为vlan网关、与sw1 ip地址直连核心层交换机(sw1)配置ip地址与汇聚层交换机&…

容器技术:从虚拟机到轻量级容器的革命

一、引言 首先,什么是容器? 容器是一种沙盒技术,主要目的是为了将应用运行在其中,与外界隔离;及方便这个沙盒可以被转移到其它宿主机器。本质上,它是一个特殊的进程。通过名称空间(Namespace&a…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《计及调频能力和经济效益的储能集群多状态区间优化策略》

这个标题提到了三个关键概念:储能集群、调频能力和经济效益,以及多状态区间优化策略。下面我将为你解释每个概念的含义,并对整个标题进行解读。 首先,"储能集群"是指将多个储能系统连接在一起形成一个集群,…

【算法】bfs与dfs算法解决FloodFill(洪流)问题(C++)

文章目录 1. 什么是FloodFill问题2. 用什么方法解决FloodFill问题3. 具体例题773.图像渲染200.岛屿数量695.岛屿的最大面积130.被围绕的区域 1. 什么是FloodFill问题 一般floodfill问题可以描述为:给定一个二维矩阵,其中每个元素代表一个像素点&#xf…

HarmonyOS4.0从零开始的开发教程18HarmonyOS应用/元服务上架

HarmonyOS(十六)HarmonyOS应用/元服务上架 简介 随着生活节奏的加快,我们有时会忘记一些重要的事情或日子,所以提醒功能必不可少。应用可能需要在指定的时刻,向用户发送一些业务提醒通知。例如购物类应用&#xff0c…

1264. 动态求连续区间和(树状数组---某个位置加上一个数/求在线(动态)前缀和/蓝桥杯)

题目&#xff1a; 输入样例&#xff1a; 10 5 1 2 3 4 5 6 7 8 9 10 1 1 5 0 1 3 0 4 8 1 7 5 0 4 8输出样例&#xff1a; 11 30 35 树状数组&#xff1a; 代码&#xff1a; #include<cstdio> #include<iostream> using namespace std;const int N100010; int n,…

Lazy_Linkage详解

对 动态链接中 Lazy_Linkage 进行调式 —— 以 func.ELF2 调用 func 函数为例 首先是用 gdb 打开 func.ELF2 中间文件&#xff0c;并在 main 函数处打上断点 run 起来&#xff0c;可以看到 <main 0> 到 <main 7> 是程序运行的准备工作&#xff0c;下一条指令是…

OpenCV 1.1:读取本地图片显示灰度图及CV版本

imread方法加载图像 imread 功能是加载图像文件成为一个 Mat 对象&#xff0c;其中第一个参数表示图像文件名称&#xff0c;第二个参数表示加载的图像是什么类型&#xff0c;支持常见的三个参数值IMREAD_UNCHANDED(<0) 表示加载原图&#xff0c;不做任何改变IMREAD_GRAYSCA…

PyTorch自动梯度计算(注意点)

if params.grad is not None: params.grad.zero_() 我们实际的运算往往会涉及到若干个requires-grad为true的张量进行运算&#xff0c;在这种情况下&#xff0c;Pytorch会计算整个计算图上的损失的导数&#xff0c;并把这些结果累加到grad属性中。多次调用backward()会导致梯度…

【漏洞复现】CVE-2023-6848 kodbox远程命令执行

漏洞描述 kodbox 是一个网络文件管理器。它也是一个网页代码编辑器,允许您直接在网页浏览器中开发网站。您可以在基于 Linux、Windows 或 Mac 的平台上在线或本地运行 kodbox。唯一的要求是要有 PHP 5及以上。 kalcaddle kodbox 中发现漏洞,最高版本为 1.48。它已被宣布为关…

Chrome2023新版收藏栏UI改回旧版

版本 120.0.6099.109&#xff08;正式版本&#xff09;Chrome浏览器菜单新版、旧版的差异 想要将书签、功能内容改回旧版的朋友可以网址栏输入&#xff1a;「chrome://flags」&#xff0c;接着搜寻「Chrome Refresh 2023」。 最后将 Chrome Refresh 2023、Chrome Refresh 2023…

使用VBA快速统计词组词频(多单词组合)(2/2)

实例需求&#xff1a;产品清单如A列所示&#xff0c;现在如下统计多单词组合词组词频。 在上一篇博客中《使用VBA快速统计词组词频(多单词组合)&#xff08;1/2&#xff09;》讲解了如何实现双词的词频统计。 本文将讲解如何实现3词的词频统计&#xff0c;掌握实现方法之后&a…