InnoDB学习笔记一引擎架构及特性

本文深入探讨了InnoDB存储引擎的架构,包括其多线程模型,如Master Thread、IO Thread、Purge Thread和Page Cleaner Thread。此外,文章详细介绍了InnoDB的特性,如插入缓冲、双写机制、自适应哈希索引和异步IO,旨在理解其如何优化数据库性能和数据一致性。
摘要由CSDN通过智能技术生成

数据库是数据的集合,数据库管理系统(DBMS)是操作和管理数据库的应用程序。数据库应用主要有两类:OLAP(联机分析处理)和OLTP(联机事务处理)。

OLAP的主要特点是:

  • 实时性要求不高
  • 数据量大
  • 并发量小

OLTP的主要特点是:

  • 实时性要求高
  • 数据量小
  • 高并发
  • 要求满足ACID

mysql是一种OLTP类型的DBMS或者说OLTP是传统的关系型数据库的主要应用,其体系架构如下图所示:
在这里插入图片描述

mysql中集成的是插件式的存储引擎,InnoDB引擎是其中之一。存储引擎基于表而不是数据库:同一个数据库中根据不同表的访问操作需求可以选择不同的存储引擎。

一、InnoDB引擎架构

InnoDB引擎主要面对OLTP类应用

InnoDB引擎在mysql中处于文件和文件系统的上层,管理着对InnoDB引擎表的访问和更新。

1.1 InnoDB架构图

InnoDB完整架构图
在这里插入图片描述

图片来源与官网:

https://dev.mysql.com/doc/refman/5.7/en/innodb-architecture.html

1.2 InnoDB的一个多线程模型

在这里插入图片描述

1.2.1 Master Thread - 核心线程

Master Thread是InnoDB存储引擎非常核心的一个后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓冲、UNDO页的回收等。

1.0.x版本之前的Master Thread

Master Thread具有最高的线程优先级别。内部由多个循环组成:主循环(loop)后台循环(backgroup loop)、刷新循环(flush loop)、暂停循环(suspend loop)。Master Thread会根据数据库运行的状态在loop、backgroup loop、flush loop和suspend loop中进行切换

主loop线程

loop是主循环,大多数的操作都在这个循环中,主要有两大部分的操作——每秒钟的操作和每10秒钟的操作。伪代码如下:

void master_thread()
{
   
    loop:
    for(int i = 0; i < 10; ++i){
   
        do thing once per second;
        sleep 1 second if necessary;
    }
    do things once per ten seconds;
    goto loop;
}

每秒一次的操作包括:

  1. 日志缓冲刷新到磁盘,即使这个事务还没有提交(总是)

    即使某个事务还没有提交,InnoDB存储引擎仍然每秒会将reDo日志缓冲中的内容刷新到重做日志文件。这也解释了为什么再大的事务提交的时间也是很短的。

  2. 合并插入缓冲(可能)

    合并插入缓冲并不是每秒都会发生的。InnoDB存储引擎会判断当前一秒内发生的IO次数是否小于5次,如果小于5次,InnoDB存储引擎认为当前的IO压力很小,可以执行合并插入缓冲的操作;

    什么叫做合并插入缓冲:对于非聚集索引每次插入会随机访问页,写入性能低,这里可以采取将多个插入操作合并到一个io中,增加写的性能

  3. 至多刷新100个InnoDB的缓冲池中的脏页到磁盘(可能)
    刷新100个脏页也不是每秒都会发生的,InnoDB存储引擎通过判断当前缓冲池中脏页的比例(buf_get_modified_ratio_pct)是否超过了配置文件中
    innodb_max_dirty_pages_pct这个参数(默认是75,代表75%),如果超过了这个值,InnoDB存储引擎则认为需要做磁盘同

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值