首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
select
foreach
subset
heatmap
scala
hash
split
blob
instance
search
request
header
timezone
match
schema
sum
php8
dagger
bitmap
client
include
command
future
const
runtime
ascii
netty
tags
metadata
substring
md5
tree
plugins
export
flutter
settings
main
lua
require
integer
callback
python3
actionscrip
hashtable
hashset
python
chat
email
keyword
case
int
golang
audio
get
process
hook
数组
window
frameworks
cmd
input
httpclient
testing
web3
jar
stream
iostream
filter
php
range
java
datetime
cPlusPlus
char
go
hashcode
ip
list
bytecode
当前位置:
开发笔记
>
编程语言
> 正文
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
深入浅出:Hadoop架构详解
Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ...
[详细]
蜡笔小新 2024-11-26 13:26:40
header
PHP 5.4 下 Windows 7 环境中 Memcached 分布式缓存的安装与配置
本文详细介绍了在 Windows 7 上安装和配置 PHP 5.4 的 Memcached 分布式缓存系统的方法,旨在减少数据库的频繁访问,提高应用程序的响应速度。 ...
[详细]
蜡笔小新 2024-11-26 04:43:01
future
Python 从文本文件中读取数据至字典的方法详解
本文详细介绍了如何利用 Python 语言从文本文件中读取数据,并将其存储为字典格式,涵盖多种实用技巧和示例代码。 ...
[详细]
蜡笔小新 2024-11-25 21:51:46
client
深入解析轻量级数据库 SQL Server Express LocalDB
本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ...
[详细]
蜡笔小新 2024-11-25 20:36:01
client
MySQL 安装指南
本文档提供了详细的MySQL安装步骤,包括解压安装文件、选择安装类型、配置MySQL服务以及设置管理员密码等关键环节,帮助用户顺利完成MySQL的安装。 ...
[详细]
蜡笔小新 2024-11-27 09:10:30
client
Navicat Premium中MySQL用户管理:创建新用户及高级设置
本文作为Navicat Premium用户管理系列的第二部分,主要介绍如何创建新的MySQL用户,包括设置基本账户信息、密码策略、账户限制以及SSL配置等。 ...
[详细]
蜡笔小新 2024-11-26 19:43:05
command
Mac环境下Python与MySQL交互指南
本文详细介绍了在Mac操作系统中使用Python连接MySQL数据库的方法,包括常见的错误处理及解决方案。 ...
[详细]
蜡笔小新 2024-11-26 17:41:41
command
Oracle RMAN 增量备份详解:差异增量与累积增量
本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ...
[详细]
蜡笔小新 2024-11-25 19:07:53
select
SQL 数据恢复技巧:利用快照实现高效恢复
本文详细介绍了如何在 SQL 中通过数据库快照实现数据恢复,包括快照的创建、使用及恢复过程,旨在帮助读者深入了解这一技术并有效应用于实际场景。 ...
[详细]
蜡笔小新 2024-11-25 18:00:40
future
构建Python自助式数据查询系统
在现代数据密集型环境中,业务团队频繁需要从数据库中提取特定信息。为了提高效率并减少IT部门的工作负担,本文探讨了一种利用Python语言实现的自助数据查询工具的设计与实现。 ...
[详细]
蜡笔小新 2024-11-25 17:55:33
const
详解MyBatis二级缓存的启用与配置
本文深入探讨了MyBatis二级缓存的启用方法及其配置细节,通过具体的代码实例进行说明,有助于开发者更好地理解和应用这一特性,提升应用程序的性能。 ...
[详细]
蜡笔小新 2024-11-25 17:47:13
const
利用Cookie实现用户登录状态的持久化
本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ...
[详细]
蜡笔小新 2024-11-25 06:19:33
const
Hadoop集群搭建:实现SSH无密码登录
本文介绍了如何在CentOS 7 64位操作系统环境下配置Hadoop集群中的SSH无密码登录,包括环境准备、用户创建、密钥生成及配置等步骤。 ...
[详细]
蜡笔小新 2024-11-24 19:47:28
const
在CentOS 7中部署Nginx并配置SSL证书
本文详细介绍了如何在CentOS 7操作系统上安装Nginx服务器,并配置SSL证书以增强网站的安全性。适合初学者和中级用户参考。 ...
[详细]
蜡笔小新 2024-11-24 02:18:19
const
41款高效LISP工具助力数据处理全流程
本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ...
[详细]
蜡笔小新 2024-11-24 00:11:50
okkkokkokkkokka
这个家伙很懒,什么也没留下!
Tags | 热门标签
select
foreach
subset
heatmap
scala
hash
split
blob
instance
search
request
header
timezone
match
schema
sum
php8
dagger
bitmap
client
include
command
future
const
runtime
ascii
netty
tags
metadata
substring
RankList | 热门文章
1
jQuery节点的css设置
2
Xcode 10资产目录保留矢量数据不起作用
3
jQuery表格列宽可变,兼容firfox
4
带复选框黑客的下拉菜单不起作用
5
create-react-app中的ENOSPC错误
6
Chrome浏览器Json查看插件JsonHandle下载以
7
如何唯一识别一台电脑
8
Angular CLI 6未知选项:' - singleRun'
9
Firebase动态链接.如何删除page.link的自定义子域
10
如何使用Graphviz绘制箭头指向的节点?
11
压缩多个addClass
12
角材料表尺寸/滚动
13
是否总是在startActivity之前安排完成?
14
经络不通危害多多 中医5种方法可打通经络
15
新的stackoverflow网站设计(隐藏左侧面板)
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有