Mysql之innodb架构
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 的工作压力,减少阳塞。
Mysql之innodb架构的更多相关文章
- MySQL高可用架构之MHA
简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是 ...
- MYSQL企业常用架构与调优经验分享
一.选择Percona Server.MariaDB还是MYSQL mysql应用源码:http://www.jinhusns.com/Products/Download/?type=xcj 1.M ...
- 【MySQL大系】《Mysql集群架构》
原文地址(微信):[技术文章]<Mysql集群架构> 本文地址:http://www.cnblogs.com/aiweixiao/p/7258444.html 点击关注微信公众号 1.主要 ...
- MYSQL 企业常用架构与调优经验分享
一.选择Percona Server.MariaDB还是MYSQL mysql应用源码:http://www.jinhusns.com/Products/Download/?type=xcj 1.M ...
- MySQL系列详解七:MySQL双主架构演示-技术流ken
前言 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mys ...
- 33.MySQL高可用架构
33.高可用架构33.1 MMM架构MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序(Perl).主要用来 ...
- MySQL高可用架构-MHA环境部署记录
一.MHA介绍 MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司) ...
- MySQL性能管理及架构设计
第1章 实例和故事 1-1 什么决定了电商双11大促的成败 老板可能会说:"是我们的英明决策和运筹帷幄". 运营和产品可能会说:"是由于我们的活动策划和产品设计" ...
- 转一下大师兄的"MySQL高可用架构之MHA"
简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是 ...
- (转)mysql、innodb和加锁分析
mysql.innodb和加锁分析 原文:https://liuzhengyang.github.io/2016/09/25/mysqlinnodb/ 介绍 本文主要介绍MySQL和InnoDB存储引 ...
随机推荐
- 各类LLM模型分析比较
Large Language Model 模型对比 对于LLM模型框架主要如下3类[1]:1.autoregressive,2.autoencoding,3.encoder-decoder.主要对3类 ...
- 二十一: Mysql 锁机制
Mysql 锁机制 事务的 隔离性 由这章讲述的 锁 来实现. 1. 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制.在程序开发中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤 ...
- 二十: MySql 事务日志
MySql 事务日志 事务有4种特性:原子性.一致性.隔离性和持久性.那么事务的四种特性到底是基于什么机制实现呢? 事务的隔离性由 锁机制 实现. 而事务的原子性.一致性和持久性由事务的 redo 日 ...
- SSH原理与实践(二)
主页 个人微信公众号:密码应用技术实战 个人博客园首页:https://www.cnblogs.com/informatics/ 引言 在上一篇文章[ssh原理与实践(一)]中我们详细介绍了SSH两种 ...
- Windows10 Linux 子系统的骚操作之 Ctrl+Alt+T shell启动终端
巨硬的 WSL(Windows Subsystem for Linux)是真的好用 但是,由于本人比较喜欢按快捷键.所以一直想着找到Windows上安装的ubuntu.exe文件,搞个快捷方式,然后再 ...
- Android TextView自动缩放能够完整显示出一行
原文地址: Android TextView自动缩放能够完整显示出一行 - Stars-One的杂货小窝 app开发中,需要TextView可以在不同的屏幕大小要完整显示出文字,而不是显示省略号 可以 ...
- python高级技术(死锁、递归锁、信号量、Event事件、进程池、线程池、协程)
一 死锁和递归锁(了解) 进程也有死锁与递归锁,使用方法类似 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 此时称 ...
- 「AntV」基于众源轨迹数据的三维路网生成与L7可视化
1. 引言 L7 地理空间数据可视分析引擎是一种基于 WebGL 技术的地理空间数据可视化引擎,可以用于实现各种地理空间数据可视化应用.L7 引擎支持多种数据源和数据格式,包括 GeoJSON.CSV ...
- 记录--axios和loading不得不说的故事
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 loading的展示和取消可以说是每个前端对接口的时候都要关心的一个问题.这篇文章将要帮你解决的就是如何结合axios更加简洁的处理loa ...
- 使用docker运行nginx服务,挂载自定义配置文件
错误命令: 下面的方式,启动容器时,-d 后面跟一个指定容器ID的参数写在前面,导致容器不能正常启动,出现异常 docker run --name testnginx -d 7f0fd59e0094 ...
