首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
bit
cPlusPlus
md5
command
future
nodejs
split
utf-8
frameworks
process
数组
heap
runtime
js
ip
dockerfile
object
less
stream
java
integer
testing
hashtable
vba
request
php
web
cSharp
express
bitmap
python3
php5
byte
hook
bash
grid
random
triggers
rsa
httpclient
merge
join
foreach
bytecode
keyword
chat
hash
iostream
perl
client
javascript
timestamp
golang
function
version
require
timezone
case
spring
yaml
subset
solr
search
jsp
regex
expression
int
python
flutter
callback
httprequest
dll
datetime
instance
c语言
io
replace
erlang
hashcode
当前位置:
开发笔记
>
编程语言
> 正文
MySQLInnoDB事务日志详解:RedoLog与UndoLog
作者:okkkokkokkkokka | 来源:互联网 | 2024-11-23 15:34
本文详细介绍了MySQLInnoDB存储引擎中的RedoLog和UndoLog,探讨了它们的工作原理、存储方式及其在事务处理中的关键作用。
### Redo Log
InnoDB事务日志主要包含Redo Log(重做日志)和Undo Log(回滚日志)。Redo Log用于记录数据页的物理修改,确保数据在系统崩溃后能够恢复到最近的提交点;而Undo Log则用于提供回滚操作和支持多版本并发控制(MVCC)。
#### Redo Log的基本概念
- **物理日志**:Redo Log记录的是数据页的物理变化,而非具体的数据行变化。
- **恢复机制**:Redo Log主要用于恢复已提交的事务,确保数据的一致性和完整性。
- **日志结构**:Redo Log包括内存中的日志缓冲区(redo log buffer)和磁盘上的重做日志文件(redo log file)。内存中的日志缓冲区是易失性的,而磁盘上的日志文件是持久化的。
#### 写入机制
- **force log at commit**:InnoDB通过这一机制确保事务的持久性。在事务提交时,必须将事务的所有日志写入磁盘上的Redo Log文件和Undo Log文件。
- **fsync操作**:每次将日志缓冲区中的日志写入日志文件时,都会调用操作系统的fsync操作,确保日志被写入磁盘。
- **innodb_flush_log_at_trx_commit**:该变量控制事务提交时日志的写入策略,有三种值:0、1、2,默认为1。设置为1时,每次提交都会将日志写入磁盘,保证数据安全;设置为0时,每秒写入一次,可能导致数据丢失;设置为2时,每次提交写入操作系统缓冲区,每秒同步到磁盘。
### 日志块
- **存储单位**:Redo Log以512字节的块(redo log block)为单位存储。
- **日志块结构**:每个日志块由日志块头(12字节)、日志块尾(8字节)和日志主体(492字节)组成。
- **日志格式**:Redo Log记录的是数据页的变化,每个日志块的主体部分包括日志类型(1字节)、表空间ID(压缩后可能小于4字节)、页偏移量(压缩后)和日志数据。
### 刷盘规则
- **脏日志**:内存中未写入磁盘的日志称为脏日志。
- **刷盘时机**:
- 事务提交时。
- 每秒自动刷盘。
- 当日志缓冲区使用超过一半时。
- 发生检查点(checkpoint)时。
### Checkpoint
- **脏数据**:内存中未写入磁盘的数据称为脏数据。
- **触发条件**:
- 系统内存不足。
- 日志文件达到最大值。
- 系统定期触发。
### Binlog与Redo Log
- **Binlog**:MySQL Server层实现的日志,记录的是SQL语句的逻辑变化。
- **Redo Log**:InnoDB引擎特有的物理日志,记录的是数据页的物理变化。
- **区别**:
- **格式**:Redo Log是物理日志,Binlog是逻辑日志。
- **用途**:Redo Log主要用于崩溃恢复,Binlog主要用于数据归档和主从复制。
- **写入方式**:Redo Log是循环写入的,Binlog是追加写入的。
### Undo Log
- **作用**:提供回滚和多版本并发控制(MVCC)。
- **逻辑日志**:记录的是逻辑变化,如删除操作记录为插入,更新操作记录为相反的更新。
- **存储管理**:InnoDB使用回滚段(rollback segment)管理Undo Log,每个回滚段包含1024个Undo Log段。
- **删除机制**:事务提交时,Undo Log不会立即删除,而是放入删除列表中,由Purge线程异步处理。
### 慢查询日志
- **功能**:记录响应时间超过阈值的SQL语句,帮助优化查询性能。
- **配置**:通过`long_query_time`参数设置阈值,默认为10秒。
- **启用**:默认情况下,慢查询日志是关闭的,需要手动启用。启用后,日志可以写入文件或数据库表。
mysql
日志
login
buffer
文件
io
sql
server
压缩
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
insert
MyBatis 动态 SQL 详解与应用
本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ...
[详细]
蜡笔小新 2024-12-27 16:20:10
php
PHP 5.2.5 安装与配置指南
本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ...
[详细]
蜡笔小新 2024-12-27 19:05:41
php
MySQL缓存机制深度解析
本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ...
[详细]
蜡笔小新 2024-12-26 15:15:06
php
PHP 编程疑难解析与知识点汇总
本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ...
[详细]
蜡笔小新 2024-12-28 12:22:34
php
深入理解 SQL 视图、存储过程与事务
本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ...
[详细]
蜡笔小新 2024-12-27 17:40:42
php
网站与MySQL数据库的连接与交互
本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ...
[详细]
蜡笔小新 2024-12-27 14:09:23
php
优化MySQL InnoDB的IO性能:配置参数详解
本文深入探讨了如何通过调整InnoDB的关键配置参数来优化MySQL的随机IO性能,涵盖了缓存、日志文件、预读机制等多个方面,帮助读者全面提升数据库系统的性能。 ...
[详细]
蜡笔小新 2024-12-27 13:00:29
php
SQL 触发器实现视图插入操作
本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ...
[详细]
蜡笔小新 2024-12-26 15:53:40
php
高效解决应用崩溃问题!友盟新版错误分析工具全面升级
友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ...
[详细]
蜡笔小新 2024-12-26 14:11:47
php
android知识杂记(三)
andr ...
[详细]
蜡笔小新 2024-12-26 13:29:32
php
Deepin系统下MySQL 5.7安装指南
本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ...
[详细]
蜡笔小新 2024-12-28 10:48:41
object
Windows服务与数据库交互问题解析
本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ...
[详细]
蜡笔小新 2024-12-28 10:30:14
php
新浪笔试题
1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ...
[详细]
蜡笔小新 2024-12-27 19:32:17
php
CentOS7源码编译安装MySQL5.6
2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ...
[详细]
蜡笔小新 2024-12-27 17:49:56
php
Dockerfile 编写与 Docker 网络配置详解
本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ...
[详细]
蜡笔小新 2024-12-27 17:31:41
okkkokkokkkokka
这个家伙很懒,什么也没留下!
Tags | 热门标签
bit
cPlusPlus
md5
command
future
nodejs
split
utf-8
frameworks
process
数组
heap
runtime
js
ip
dockerfile
object
less
stream
java
integer
testing
hashtable
vba
request
php
web
cSharp
express
bitmap
RankList | 热门文章
1
spring @component的作用详细介绍
2
JSP 开发之servlet中调用注入spring管理的dao
3
JSP中EL表达式用法_动力节点Java学院整理
4
JSP 中Session的详解及原理分析
5
tomcat共享多个web应用会话的实现方法
6
将properties文件的配置设置为整个Web应用的全局变量实现方法
7
jsp+servlet实现文件上传与下载功能
8
word-wrap
9
相对路径与绝对路径的区别
10
WML开发教程之 WAP网站服务器配置方法
11
http协议详解(超详细)
12
IDEA中使用Git拉取代码时报 Git pull failed原因及解决方法
13
Hadoop框架起步之图解SSH、免密登录原理和实现方法
14
http请求405错误方法不被允许的解决 (Method not allowed)
15
定时检查网站是否掉线的批处理
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有