首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
string
expression
frameworks
cPlusPlus
web
golang
bitmap
import
bytecode
tags
random
install
less
triggers
数组
email
solr
format
heap
hash
runtime
httprequest
java
list
php7
stream
dagger
fetch
erlang
vbscript
process
c语言
cookie
buffer
client
require
scala
text
uml
keyword
case
eval
testing
usb
timezone
go
substring
php
web3
int
typescript
default
cpython
audio
utf-8
nodejs
merge
request
heatmap
datetime
jar
timestamp
bash
post
uri
metadata
dockerfile
actionscrip
command
get
python2
javascript
window
tree
hashtable
range
foreach
ip
export
当前位置:
开发笔记
>
编程语言
> 正文
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
压缩
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
install
Linux 系统启动故障排除指南:MBR 和 GRUB 问题
本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ...
[详细]
蜡笔小新 2024-12-27 20:40:29
list
新浪笔试题
1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ...
[详细]
蜡笔小新 2024-12-27 19:32:17
string
PHP 5.2.5 安装与配置指南
本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ...
[详细]
蜡笔小新 2024-12-27 19:05:41
string
MySQL缓存机制深度解析
本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ...
[详细]
蜡笔小新 2024-12-26 15:15:06
string
高效解决应用崩溃问题!友盟新版错误分析工具全面升级
友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ...
[详细]
蜡笔小新 2024-12-26 14:11:47
java
android知识杂记(三)
andr ...
[详细]
蜡笔小新 2024-12-26 13:29:32
java
Hadoop入门与核心组件详解
本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ...
[详细]
蜡笔小新 2024-12-26 13:12:48
java
深入理解领域驱动设计及其实践
本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ...
[详细]
蜡笔小新 2024-12-25 18:45:55
java
Redis 持久化机制详解:RDB与AOF的原理、优缺点及选择策略
本文深入探讨了 Redis 的两种持久化方式——RDB 快照和 AOF 日志。详细介绍了它们的工作原理、配置方法以及各自的优缺点,帮助读者根据具体需求选择合适的持久化方案。 ...
[详细]
蜡笔小新 2024-12-24 18:03:44
list
优化ListView性能
本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ...
[详细]
蜡笔小新 2024-12-28 10:36:30
list
数据库内核开发入门 | 搭建研发环境的初步指南
本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ...
[详细]
蜡笔小新 2024-12-27 16:38:48
list
网站与MySQL数据库的连接与交互
本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ...
[详细]
蜡笔小新 2024-12-27 14:09:23
java
使用 SQLiteJDBC 和 HikariCP 实现 Java 程序连接 SQLite 数据库
本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ...
[详细]
蜡笔小新 2024-12-26 17:34:42
java
使用Python在SAE上开发新浪微博应用的初步探索
最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ...
[详细]
蜡笔小新 2024-12-26 13:36:52
install
MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ...
[详细]
蜡笔小新 2024-12-26 13:21:38
okkkokkokkkokka
这个家伙很懒,什么也没留下!
Tags | 热门标签
string
expression
frameworks
cPlusPlus
web
golang
bitmap
import
bytecode
tags
random
install
less
triggers
数组
email
solr
format
heap
hash
runtime
httprequest
java
list
php7
stream
dagger
fetch
erlang
vbscript
RankList | 热门文章
1
如何在Maven中高效切换数据存储库
2
在MPAndroidChart中,当滑动至最后一个数据点时自动加载更多数据
3
如何在PHP中嵌入JavaScript(2023年最新实践指南)
4
在CentOS上部署并使用FFmpeg多媒体处理工具
5
Python AlphaShape:基于点集估算图像区域的Alpha形状算法解析
6
利用PHP SDK高效接入新浪微博热搜榜单功能
7
Configure Default Settings for Multiple Data Sources
8
如何在PHP中通过已知元素的键值定位并操作其同级元素?
9
如何设置域名默认301重定向至www前缀
10
电脑频繁自动重启的原因及解决方案分析
11
掌握PHP编程必备知识与技巧——全面教程
12
2021年高考学业水平测试成绩查询通道及2020年学业水平考试成绩查询入口详解
13
为标签添加HTML样式效果
14
解决Cookie中无法存储特殊字符的问题及优化方案
15
Go 项目中数据库配置文件的优化与应用
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有