redo

innodb存储引擎中,事务日志通过重做(redo)日志文件和InnoDB存储引擎的日志缓冲(InnoDB Log Buffer)来实现。当开始一个事务时,会记录该事务的一个LSN(Log Sequence Number,日志序列号);当事务执行时,会往InnoDB存储引擎的日志缓冲里插入事务日志;当事务提交时必须将InnoDB存储引擎的日志缓冲写到磁盘(默认的实现,即innodb_flush_log_at_trx_commit=1)。也就是在写数据前,需要先写日志,这种方式称为预写日志方式(Write-Ahead LoggingWAL)

InnoDB存储引擎通过预写日志的方式来保证事务的完整性。这意味着磁盘上存储的数据页和内存缓冲池的页是不同步的,对于内存缓冲池中页的修改,先是写入重做日志文件,然后再写入磁盘,因此是一种异步的方式。可以通过命令show engine innodb status来观察当前磁盘和日志的差距

首先建立一张表z,然后建立一个往表z中导入数据的存储过程load test。通过命令SHOW ENGINE INNODB STATUS观察当前的重做日志情况:

 

Log sequence number表示当前的ISN, Log flushed up to表示刷新到重做日志文件的LSN, Last checkpoint at表示刷新到磁盘的LSN。因为当前没有任何操作,所以这三者的值是一样的。接着开始导入10000条记录:

mysql>call load test(10000);

mysql> show engine innodb status\G;

······

---

LOG

---

Log sequence number 11 3047672789

Log flushed up to 11 3047672789

Last checkpoint at 11 3047174608

0 pending log writes, 0 pending chkp writes

143 log i/o' s done, 0.08 log i/o' s second

······

1 row in set (0.00 sec)

 

这次SHOW ENGINE INNODB STATUS的结果就不同了, Log sequence numberLSN113047672789, Log flushed up toLSN113047672789Last checkpoint atLSN113047174608,可以把 Log flushed up toLast checkpoint at的差值498181(~486.5K)理解为重做日志产生的增量(以字节为单位)

虽然在上面的例子中, Log sequence numberLog flushed up to的值是相等的,但是在实际的生产环境中,该值有可能是不同的。因为在一个事务中从日志缓冲刷新到重做日志文件,并不只是在事务提交时发生,每秒都会有从日志缓冲刷新到重做日志文件的动作(这部分内容我们在362小节已经讲解过了)。下面是一个生产环境下重做日志的信息:

mysql> show engine innodb status\G;

······

---

LOG

---

Log sequence number 203318213447

Log flushed up to 203318213326

Last checkpoint at 203252831194

1 pending log writes, 0 pending chkp writes

103447 log i/o' s done, 7.00 log i/o' s second

······

1 row in set (0.00 sec)

 

可以看到,在生产环境下Log sequence numberLog flushed up toLast checkpoint at个值可能是不同的。

转载于:https://www.cnblogs.com/5945yang/p/11061669.html

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

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

相关文章

迭代子模式(Iterator)

顾名思义,迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟悉的话,理解本模式会十分轻松。这句话包含两层意思:一是需要遍历的对象,即聚集对象,二是…

ES6基础之——对象表达式

这里定义了两个变量,一个是dessert,一个是drink,let dessertcake,drinkorange;一、根据两个变量的值去定义一个对象,这个对象叫food,对象里面属性跟变量的名字是一样的,属性值对应上面的变量let dessertcake,drinkorange; let food{ dessert:…

前台获取元素节点

$("#id").childNodes;//获取id的全部子节点; $("#id").parentNode;//获取id的父节点; $("#id").nextSibling;//获取id的下一个兄弟节点 $("#id").previousSibling;//获取id的上一个兄弟节点 $("#id")…

oracle查看执行计划入门

基于Oracle的应用系统很多的性能问题都是由应用系统的SQL性能低劣引起的,因此SQL的性能优化非常重要。要分析与优化SQL的性能,一般是通过查看该SQL的执行计划,然后通过执行计划有针对性地对SQL进行相应的优化。 什么是执行计划(Ex…

这半年……

有半日也还清闲的时间,一年的一半也快过完了,那就来谈一谈这半年吧,也对下半年提出点期待。 年初,提出了本年度的的关键词:真实、踏实、勤快。 基于这个指导思想,我对自己半年的评价是:做得不错…

部署自己的tomcat,让tomcat和IIS共同享用服务器的80端口

这几天做了一个网站的CMS系统,当然就要用到TOMCAT来对项目进行部署了.但是客户的服务器上已经安转了我们用.NET制作的OA系统,所以在客户的服务器上已经有完整的IIS7服务,而IIS7默认会占用所有的80端口(虽然服务器有两个IP,而它只用…

ueditor1.4.3配置过程(包含单独上传文件以及图片的使用)

这里使用的是ueditor1.4.3的jsp版本的UTF-8版本. 首先下载相应的ueditor,将ueditor文件夹直接拷贝到项目中,文件结构如下所示: 然后将项目要用的jar包导入到lib目录下,在导入之前要先修改一下ueditor的jar包中的bug,这个可以参考这里点击打开链接 接着就是配置jsp目录下的con…

layui如何隐藏弹出层关闭的按钮

layui默认弹出层是带有关闭按钮的,但是在某些场景我们不需要layui的关闭按钮,这时只需添加closeBtn :0即可效果图如下: 示例代码如下: layui.use(layer, function () {var layer layui.layer;layer.open({skin: demo-class,type: 1,title: 登录,area: […

使用httpclient4.3.2来实现微信临时素材的上传

一直在用java来做微信的二次开发,经过一段时间的沉淀总算有了一点门路。其实用java这种强大的语言来做微信的二次开发是很简单的事情。只要解决了加密、https请求的发送、xml的解析这些基本的操作后,用java来进行微信二次开发就变的容易了很多。这里我主…

charles请求入参中有乱码

工作中,需要入参,但是发现入参中,有中文的都是乱码,仔细查阅headers,发现Content-Type是application/x-www-form-urlencoded类型,而实际上,入参是json类型,因此需要强制修改请求头为…

xstream,节点属性起别名时这样的问题你遇到过吗

首先这是我自己定义的一个xstream&#xff0c;这个xstream是为了在处理xml时能够加上<![CDATA[------]]>而特别重写的。这个xstream是没有任何问题的。 private static XStream xstream new XStream(new XppDriver() {public HierarchicalStreamWriter createWriter(Wri…

20190624 Oracle 表分析

dbms_stats.gather_table_stats&#xff08;。。。&#xff09; 参数要注意 正常情况只是为了分析表&#xff0c;也可以通过方法创建记录表 分析的结果会记录的记录表中&#xff0c;当然每次运行会有覆盖&#xff0c;主要分析后的结果。 分析表&#xff0c;记录了目前此表的情况…

用spring搭建微信公众号开发者模式下服务器处理用户消息的加密传输构架(java)

要搭建加密传输的微信公众号消息传输&#xff0c;首先要在开发这平台下载一下微信加密的相关jar包&#xff0c;并做一些准备。准备的步骤如下&#xff1a; 1.打开开发者文档&#xff0c;找到消息加减密--->接入指引&#xff0c;如下图所示&#xff1a; 2.在页面底部找到实例…

Redis 常用命令

1 运行cmd 到redis安装目录&#xff0c;cmd输入redis-cli.exe -h 127.0.0.1 -p 6379 2 密码登录 auth 输入密码 3 设置和获取 set "hello" get "hello" 4 清空 flushall转载于:https://www.cnblogs.com/hanjun0612/p/11078915.html

Spring中AOP的使用

问题&#xff1a;什么是AOP&#xff1f; 答&#xff1a;AOP基本概念&#xff1a;Aspect-Oriented Programming&#xff0c;面向方面编程的简称&#xff0c;Aspect是一种新的模块化机制&#xff0c;用来描述分散在对象、类或方法中的横切关注点(crosscutting concern)&#xff…

Mybatis generator(复制粘贴完成)

命令行模式 1、java -jar mybatis-generator-core-x.x.x.jar -configfile generatorConfig.xml 2、Maven plugin(mybatis-generator-maven-plugin) 常用 2.1、mvn mybatis-generator:generate 2.2、${basedir}/src/main/resources/generatorConfig.xml 默认读取这个文件&#x…

mybatis自己学习的一些总结

以前一直在使用spring的JDBCTEMPLATE和hibernate做项目&#xff1b;两个都还不错&#xff0c;spring的jdbctemplate用起来比较麻烦&#xff0c;虽然很简单。而hibernate呢&#xff0c;用起来很好用&#xff0c;很方便&#xff0c;但是很多规矩&#xff0c;规则还有方法到现在都…

利用python模拟菜刀反弹shell绕过限制

有的时候我们在获取到目标电脑时候如果对方电脑又python 编译环境时可以利用python 反弹shell 主要用到python os库和sokect库 这里的服务端在目标机上运行 from socket import * from os import * ssocket(AF_INET,SOCK_STREAM)#IVP4 寻址 tcp协议 s.bind((,6666))#补丁端口 …

SpringBoot配置logback-spring.xml日志

SpringBoot配置logback-spring.xml日志 https://blog.csdn.net/qq_35618489/article/details/87709409 在SpringBoot新建 logback-spring.xml 配置文件&#xff0c;因为SPringBoot官方是推荐这个方式 内容&#xff0c;拷贝复制下来就可以了 <?xml version"1.0" e…

SSL的TCP通信

一切尽在代码中&#xff0c;额&#xff0c;自己测试的小例子&#xff0c;感觉很有用&#xff0c;做个记录。 服务器端&#xff1a; </pre><pre name"code" class"java">package com.mpc.test.clazz;import java.io.BufferedReader; import ja…