首页 > 数据库 >Mysql之innodb架构

Mysql之innodb架构

时间:2024-03-19 10:56:49浏览次数:26  
标签:架构 log Buffer innodb Mysql 缓冲区 磁盘 日志 数据

Innodb存储引擎的架构

内存结构

  • Bufer Pool

缓冲池是主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),然后再以一定频率刷新到磁盘,从而减少磁盘IO,加快处理速度。

缓冲池以Page页为单位,底层采用链表数据结构管理Page。根据状态,将Page分为三种类型

  • free page:空闲page,未被使用。
  • clean page:被使用page,数据没有被修改过
  • dirty page: 脏页,被使用page,数据被修改过,也中数据与磁盘的数据产生了不一致。
  • Change Buffer:

更改缓冲区(针对于非唯一二级索引页),在执行DML语句时,如果这些数据Page没有在Buffer Pool中,不会直接操作磁盘,而会将数据变更存在更改缓冲区Change Buffer 中,在末来数据被读取时,再将数据合并恢复到Buffer Pool中,再将合并后的数据刷新到磁盘中

  • Adaptive Hash lndex

自适应hash索引,用于优化对Buffer Pool数据的查询。InnoDB存储引警会监控对表上各索引页的查询,如果观察到hash索引可以提升速度,则建立hash索引,称之为自适应hash索引。
自适应哈希索引,无需人工干预,是系统根据情况自动完成。

  • Log Buffer

日志缓冲区,用来保存要写入到磁盘中的log日志数据 (redo log、undo log),默认大小为 16MB,日志缓冲区的日志会定期刷新到磁盘中。如果需要更新、插入或删除许多行的事务,增加日志缓冲区的大小可以节省磁盘I/O。
参数:

innodb_log_buffer_size: 缓冲区大小
innodb_flush_log_a_trx_commit: 日志刷新到磁盘时机

刷盘的时机
0:每秒将日志写入并刷新到磁盘一次。
1:日志在每次事务提交时写入并刷新到磁盘
2:日志在每次事务提交后写入,并每秒刷新到磁盘一次。

磁盘结构

  • System Tablespace

系统表空间是更改缓冲区的存储区域。如果表是在系统表空间而不是每个表文件或通用表空间中创建的,它也可能包含表和索引数据。(在MSOL5x版本中还包含lnnoDB数据字典、undolog等)
参数:innodb_data_file_path

  • File-Per-Table Tablespaces

每个表的文件表空间包含单个InnoDB表的数据和索引,并存储在文件系统上的单个数据文件中。每张表有自己独立的表空间。
参数:innodb_file_per_table

  • General Tablespaces

通用表空间,需要通过 CREATE TABLESPACE 语法创建通用表空间,在创建表时,可以指定该表空间。

  • Undo Tablespaces

撤销表空间,MySQL实例在初始化时会自动创建两个默认的undo表空间(初始大小16M),用于存储undo log日志。

  • Temporary Tablespaces

InnoDB 使用会话临时表空间和全局临时表空间。存储用户创建的临时表等数据。

  • Doublewrite Buffer Files

双写缓冲区,innoDB引擎将数据页从Buffer Pool刷新到磁盘前,先将数据页写入双写缓冲区文件中,便于系统异常时恢复数据。

  • RedoLog

重做日志,是用来实现事务的持久性。该日志文件由两部分组成:重做日志缓冲(redo log buffer)以及重做日志文件(redo og),前者是在内存中,后者在磁盘中。当事务提交之后会把所有修改信息都会存到该日志中,用于在刷新脏页到磁盘时,发生错误时,进行数据恢复使用。

以循环方式写入重做日志文件,涉及两个文件:
ib_logfile0
ib_logfile1

后台线程

  • Master Thread

核心后台线程,负责调度其他线程,还负责将缓冲池中的数据异步刷新到磁盘中,保持数据的一致性,还包括脏页的刷新、合并插入缓存、undo页的回收。

  • IO Thread

在InnoDB存储引擎中大量使用了AIO来处理I0请求,这样可以极大地提高数据库的性能,而10Thread主要负责这些IO请求的回调。

  • Purge Thread

主要用于回收事务已经提交了的undo log,在事务提交之后,undo log可能不用了,就用它来回收。

  • Page Cleaner Thread

协助Master Thread 刷新脏页到磁盘的线程,它可以减轻Master Thread 的工作压力,减少阳塞。

标签:架构,log,Buffer,innodb,Mysql,缓冲区,磁盘,日志,数据
From: https://www.cnblogs.com/OpenSourceSite/p/18082248

相关文章

  • MySQL系列:索引失效场景总结
    相关文章数据库系列:MySQL慢查询分析和性能优化数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:覆盖索引和规避回表数据库系列:数据库高可用及无损扩容数据库系列:使用高区分度索引列提升性能数据库系列:前缀索引和索引长度的取舍数据库系列:My......
  • 深入理解mysql 从入门到精通
    1.MySQL结构由下图可得MySQL的体系构架划分为:1.网络接入层2.服务层3.存储引擎层4.文件系统层1.网络接入层提供了应用程序接入MySQL服务的接口。客户端与服务端建立连接,客户端发送SQL到服务端,Java中通过JDBC来实现连接数据库。2.服务层管理工具和服务:系统管理和控......
  • rocky9 编写一键安装mysql 的sh脚本
    基本操作步骤1、虚拟机最小化安装rocky9系统,安装后克隆一个系统;1个用来获取下载的rpm包,一个用来编写sh测试脚本;2、修改虚拟机的 yum配置文件,获取获取rpm程序 :启用缓存,并修改yum下载软件的路径;3、参考教程安装,安装mysql;Centos(rocky)yum安装mysql,切换路径、优化配置并......
  • 本地mysql 和云服务mysql的区别
    本地MySQL和云服务MySQL确实存在一些明显的区别,主要体现在以下几个方面:数据存储与访问方式:本地MySQL数据库通常直接安装在用户的计算机或服务器上,数据存储在本地硬盘中,用户可以直接通过本地网络或应用程序访问。而云服务MySQL则是将数据存储在云服务器上,用户需要通过互联网......
  • 本地mysql测试成功后上传至云服务器出现了这么多问题?
    本地MySQL数据库迁移至云服务器的过程中可能出现多种问题,以下是常见的一些原因及其解决思路:权限问题:账户权限:本地MySQL数据库的用户权限设置可能与云服务器上的MySQL实例不同,比如未授权远程连接或赋予了错误的权限。你需要确认云服务器MySQL数据库的用户是否有从远程IP......
  • 计算机毕业设计-基于Java+SSM架构的学生综合考评管理系统项目开发实战(附论文+源码)
    大家好!我是职场程序猿,感谢您阅读本文,欢迎一键三连哦。......
  • 【详细带你了解软件系统架构的演变】
    带你了解软件系统架构的演变`1.介绍``2.传统的单体架构(MonolithicArchitecture)``3.分层架构(LayeredArchitecture)``4.客户端-服务器架构(Client-ServerArchitecture)``5.服务导向架构(Service-OrientedArchitecture,SOA)``6.微服务架构(MicroservicesArchitecture)``7......
  • MySQL复习笔记
    MySQL概述-mysql启动netstartmysql80netstopmysql80-mysql客户端连接mysql-uroot-pSQLsql分类分类全称说明DDLDataDefinitionLanguage数据定义语言,用来定义数据库对象DMLDataManipulationLanguage数据操作语言,用来对数据库表中的数据进行增删改DQLData......
  • mysql索引(索引失效,遵循最左前缀,使用1.全值匹配 2.覆盖索引,失效:索引加函数,范围查询右边
    1.遵循联合索引最左列原则当表中创建了一个联合索引idx_name_age_position案例演示1.当我们在执行sql语句:以name为where条件时,我们可以用到索引EXPLAINSELECT*FROMemployeesWHEREname='LiLei';2.当我们在执行sql语句:以age为where条件时,索引就会失效......
  • mysql null值比较
    在SQL查询中,使用NULL值的比较需要使用ISNULL或ISNOTNULL运算符,而不是使用等号(=)进行比较。如果您想筛选出bc.id不为NULL的记录,可以使用ISNOTNULL运算符进行条件判断。以下是修改后的示例查询:sql复制SELECT*FROMbadgesASbLEFTJOINbadge_categori......