首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
default
flutter
process
join
vbscript
object
bash
dll
function
express
triggers
emoji
php7
cSharp
import
cpython
io
dagger
utf-8
settings
eval
spring
char
post
runtime
python
httpclient
require
actionscrip
php5
hashset
md5
audio
tags
heatmap
hook
range
node.js
list
string
java
web
future
lua
schema
filter
cookie
header
case
hash
heap
grid
scala
version
select
c语言
jar
dockerfile
go
iostream
random
request
integer
replace
js
sum
bit
config
split
chat
ascii
stream
php
fetch
erlang
foreach
blob
jsp
cPlusPlus
当前位置:
开发笔记
>
编程语言
> 正文
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
压缩
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
io
SQL数据库面试题解析
本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ...
[详细]
蜡笔小新 2024-12-22 14:43:35
post
PHP 编程疑难解析与知识点汇总
本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ...
[详细]
蜡笔小新 2024-12-28 12:22:34
io
Windows服务与数据库交互问题解析
本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ...
[详细]
蜡笔小新 2024-12-28 10:30:14
char
深入理解 SQL 视图、存储过程与事务
本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ...
[详细]
蜡笔小新 2024-12-27 17:40:42
io
SQL 触发器实现视图插入操作
本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ...
[详细]
蜡笔小新 2024-12-26 15:53:40
io
android知识杂记(三)
andr ...
[详细]
蜡笔小新 2024-12-26 13:29:32
post
PostgreSQL中的模式管理
本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ...
[详细]
蜡笔小新 2024-12-26 11:37:26
io
微软Exchange服务器遭遇2022年版“千年虫”漏洞
微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ...
[详细]
蜡笔小新 2024-12-25 14:08:03
io
通过Web界面管理Linux日志的解决方案
本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ...
[详细]
蜡笔小新 2024-12-24 17:11:38
io
MySQL、SQL Server 和 Oracle 中的分组与排序技巧
本文详细介绍了在 MySQL、SQL Server 和 Oracle 数据库中如何使用分组和排序功能。涵盖了聚集函数的应用、HAVING 子句的作用以及特定数据库中的独特方法,如 SQL Server 的 ROW_NUMBER() 函数和 Oracle 的相关特性。 ...
[详细]
蜡笔小新 2024-12-23 20:12:14
spring
深入解析动态代理模式:23种设计模式之三
在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ...
[详细]
蜡笔小新 2024-12-21 15:46:52
post
MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ...
[详细]
蜡笔小新 2024-12-26 13:21:38
spring
简化报表生成:EasyReport工具的全面解析
本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ...
[详细]
蜡笔小新 2024-12-22 11:11:28
python
Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ...
[详细]
蜡笔小新 2024-12-21 14:48:49
runtime
ssm 框架整合及工程分层
ssm框架整合及工程分层1.先创建一个新的project1.1配置pom.xml ...
[详细]
蜡笔小新 2024-12-21 12:56:58
okkkokkokkkokka
这个家伙很懒,什么也没留下!
Tags | 热门标签
default
flutter
process
join
vbscript
object
bash
dll
function
express
triggers
emoji
php7
cSharp
import
cpython
io
dagger
utf-8
settings
eval
spring
char
post
runtime
python
httpclient
require
actionscrip
php5
RankList | 热门文章
1
Java项目打包成JAR后无法正确访问resources目录下的文件资源
2
AirPods Pro 出现哪些问题时需要前往 Apple Store 进行 AC+电池性能检测?
3
自定义包裹组件的HTML标签:实现商品数量动态增减功能 [Keep Coding]
4
C#中实现高效UDP数据传输技术
5
深入理解二叉搜索树的第k个节点及其有序特性
6
Node.js 教程第五讲:深入解析 EventEmitter(事件监听与发射机制)
7
深入解析 vfork 系统调用及其应用场景
8
Java中创建窗口并设置窗口标题的方法详解
9
树莓派 4 HDMI 音频输出问题求解:无声音解决方案探讨
10
Linux 文件和目录管理技巧详解
11
《Offer冲刺:剑指Offer学习心得与经验分享》
12
Norton Partition Magic 中 PHP 函数 error_reporting(E_ALL ^ E_NOTICE) 的详细解析与应用
13
如何配置电脑定时自动启动和关闭功能
14
深入解析 ASP.NET 中 ViewState、Cookie 和 Session 的区别与应用
15
D2iQ与Rafay联手打造统一的应用与基础设施管理解决方案
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有