缓冲池:

    是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响。在数据库中读取的页数据会存放到缓冲池中,下次再读取相同页的时候,会首先判断该页是否在缓冲池中。对于数据库中页的修改操作,会首先修改在缓冲池中的页,然后再以一定的频率刷新到磁盘上。缓冲池中缓存的数据页有 索引页,数据页,UNDO页等。

show variables like 'innodb_buffer_pool_size'; #查看缓冲池大小

重做日志:

  主要是用来实现事务的持久性,当系统由于不确定的原因奔溃之后,InnoDB存储引擎会使用重做日志恢复到掉电前的的状态,来保证数据的完整性。由两部分组成:一是内存中的重做日志缓冲(redo log buffer),是易失的;二是重做日志文件(redo log file),是持久的。InnoDB存储引擎会首先将重做日志信息放到缓冲区,然后以一定频率将其刷新到重做日志文件中。记录了对于InnoDB存储引擎的事务日志。

  事务提交时必须先将该事务的所有日志写入重做日志文件进行持久化,待事务的COMMIT操作完才算完成。这里的日志指的就是重做日志。在InnoDB存储引擎中,由redo log 和 undo log.

show variables like 'innodb_log_buffer_size'; #查看重做日志缓冲
二进制日志:
  记录了对MySQL数据库执行更改的所有操作,但是不包括SELECT和SHOW这类操作。主要用户数据复制,如主从复制中。
show variables like 'binlog_cache_size'; #二进制日志缓冲文件大小
在支持事务的存储引擎中,所有未提交的二进制日志会被记录到一个缓存中,等到该事务提交时,
会直接将缓冲中的二进制日志写入到二进制日志文件中。这个配置是由变量 binlog_cache_size 决定的。
binlog_cache_size 是基于session的。

InnoDB 事务

  redo log 是InnDB保证事务ACID属性的重要机制 主要流程为

1.将数据读入InnoDB buffer pool ,并对相关记录加独占锁

2.将UNDO信息写入undo表空间的回滚段中

3.更改缓存页中的数据,并将更新记录写入redo buffer中

4.提交时,根据innodb_flush_log_at_trx_commit 的设置,将不同的方式将
redo_buffer中的更新记录刷新到InnoDB redo log file中,然后释放独占锁 5.最后 后台IO线程根据需要择机将缓存中更新过的数据刷新到磁盘文件中 #show engine innodb status 命令查看当前日志的写入情况

InnoDB内存优化

innodb_buffer_pool_size #存储表数据和索引数据的最大缓存 在保证操作系统和其它程序有足够内存可用的情况下 innodb_buffer_pool_size的值越大 缓存命中率越高 访问InnoDB表需要的磁盘I/O就越少 性能也就越高
innodb_log_buffer_size #决定InnoDB 重做日志缓存池的大小 对于可能产生大量 更新记录的大事务 可增加其大小 避免在事务提交前 就执行不必要的日志写入磁盘操作

InnoDB应用优化

  作用:存储select查询的文本和结果,若下次收到相同查询,会从查询缓存中直接得到结果,而不再需要解析和查询

更新:当表结构和数据更改后,查询缓存值的相关条目被清空

InnoDB体系架构总结(一)的更多相关文章

  1. InnoDB体系架构(四)Master Thread工作方式

    Master Thread工作方式 在前面的文章:InnoDB体系架构——后台线程 说到:InnoDB存储引擎的主要工作都是在一个单独的后台线程Master Thread中完成.这篇具体介绍该线程的具 ...

  2. InnoDB体系架构(三)Checkpoint技术

    Checkpoint技术 前篇 InnoDB体系架构(二)内存 从缓冲池.缓冲池的管理.重做日志缓冲.额外内存缓冲这四个点介绍了InnoDB存储引擎的内存结构,而在将缓冲池的数据刷新到磁盘的过程中使用 ...

  3. InnoDB体系架构(二)内存

    InnoDB体系架构(二)内存 上篇文章 InnoDB体系架构(一)后台线程 介绍了MySQL InnoDB存储引擎后台线程:Master Thread.IO Thread.Purge Thread. ...

  4. InnoDB体系架构(一)后台线程

    InnoDB体系架构——后台线程 上一篇已经了解了MySQL数据库的体系结构 这一篇除了介绍InnoDB存储引擎的体系架构外,同时进一步了解InnoDB的后台线程. InnoDB存储引擎是多线程的模型 ...

  5. InnoDB体系架构

    MySQL支持插件式存储引擎,常用的存储引擎则是MyISAM和InnoDB,通常在OLTP(Online Transaction Processing 在线事务处理)中,我们选择使用InnoDB,所以 ...

  6. 2.3 InnoDB 体系架构

    下图简单显示了InnoDB的存储引擎的体系架构,从图可见,InnoDB储存引擎有多个内存块,可以认为这些内存块组成了一个大的内存池,负责如下工作: 维护所有进程/线程需要访问的多个内部数据结构 缓存磁 ...

  7. InnoDB体系架构总结(二)

    事务 确保事务内的SQL都可以同步执行 要么一起成功 要么一起失败.事务有四个特性原子性 一致性,隔离性,持久性 实现方式 开始事务的时候回家记录记录一个LSN日志序列 当事务执行的时候 会首先在In ...

  8. MySQL技术内幕 InnoDB存储引擎 之 InnoDB体系架构

    后台线程 1.Master Thread 2.IO Thread 3.Purge Thread 4.Page Cleaner Thread  内存 重做日志在以下三种情况下将重做日志缓存中的内容刷新到 ...

  9. MySQL--InnoDB 体系架构

    InnoDB 体系架构 后台线程 Master Thread Master Thread 是一个非常核心的后台线程,主要负责将缓冲池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新.合并插入缓 ...

随机推荐

  1. Spring AOP SpringBoot集成

    上一篇文章<Spring AOP 面向切面编程入门>对AOP作了简要的介绍,包含一些专业术语的解释. 本文基于SpringBoot编写了一个简单的Spring AOPDemo. maven ...

  2. 黑客攻防技术宝典web实战篇:工具web服务器习题

    猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 随书答案. 1. 在什么情况下 Web 服务器会显示目录列表? 如果请求某目录的 URL 且满足以下条件,W ...

  3. [洛谷P2417]课程

    题目链接: 点我 题目分析: 二分图最大匹配裸题,跑完匈牙利判断\(ans\)是否等于教室数即可 多组数据请注意初始化. 代码: #include<bits/stdc++.h> #defi ...

  4. android动画(3)layout动画,layoutChanged动画及算定义它,ListViewActivity的Layout动画(代码和xm配置两种实现l)

    1.layout切换动画 代码: 本示例是fragment切换.在它的oncreateView中 public class LayoutAnimationFrgmt extends Fragment ...

  5. HAL之串口

    在STM32cubeMX中 1 外设功能打开 2 GPIO对应管脚的串口功能打开 3 对应GPIO引脚的配置 4串口的配置,中断的设置 在MDK中 5.1 串口初始化MX_USART1_UART_In ...

  6. Setting up IPS/inline for Linux in Suricata

    不多说,直接上干货! 见官网 https://suricata.readthedocs.io/en/latest/setting-up-ipsinline-for-linux.html Docs » ...

  7. NIO客户端主要创建过程

    NIO客户端主要创建过程:   步骤一:打开SocketChannel,绑定客户端本地地址(可选,默认系统会随机分配一个可用的本地地址),示例代码如下:    SocketChannel client ...

  8. AJPFX简述abstract class和interface的区别

    含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象.含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是 ...

  9. AJPFX关于一维数组的声明与初始化

    一维数组:可以理解为一列多行.类型相同的数据,其中每个数据被称为数组元素:一维数组的声明方式:                type varName[]; 或 type[] varName;(推荐) ...

  10. AJPFX总结I/O流操作(一)

    在软件开发中,数据流和数据库操作占据了一个很重要的位置,所以,熟悉操作数据流和数据库,对于每一个开发者来说都是很重要的,今天就来总结一下I/O,数据库操作 一:从数据流开始 首先先有一个结构图看一下整 ...