type
status
date
slug
summary
tags
category
icon
password
整理定义
中文定义:日志缓冲区
英文定义:Log Buffer
![notion image](https://image.kuangyichen.com/image/innodb-architecture-8-0.png?t=f7d23661-3c34-4d09-ae80-595ec05d9f6c)
💡 What is log buffer?The log buffer is the memory area that holds data to be written to the log files on disk. Log buffer size is defined by theinnodb_log_buffer_size
variable. The default size is 16MB. The contents of the log buffer are periodically flushed to disk. A large log buffer enables large transactions to run without the need to write redo log data to disk before the transactions commit. Thus, if you have transactions that update, insert, or delete many rows, increasing the size of the log buffer saves disk I/O.Theinnodb_flush_log_at_trx_commit
variable controls how the contents of the log buffer are written and flushed to disk. Theinnodb_flush_log_at_timeout
variable controls log flushing frequency.
日志缓冲区(Log Buffer)是保存要写入磁盘上日志文件的数据的内存区域。
日志缓冲区的内容会定期刷新到磁盘。 大型日志缓冲区允许大型事务运行,而无需在事务提交之前将重做日志数据写入磁盘。 因此,如果您有更新、插入或删除许多行的事务,则增加日志缓冲区的大小可以节省磁盘 I/O。
复述展开
相关配置:
innodb_log_buffer_size
日志缓冲区大小由
innodb_log_buffer_size
变量定义。 默认大小为 16MB
。 Command-Line Format | --innodb-log-buffer-size=# |
System Variable | |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies | No |
Type | Integer |
Default Value | 16777216 【16MB】 |
Minimum Value | 1048576 【1MB】 |
Maximum Value | 4294967295 【4G-1】 |
innodb_flush_log_at_trx_commit
innodb_flush_log_at_trx_commit
是一个MySQL的系统变量,主要用于控制InnoDB存储引擎在事务提交时如何刷新(写入并同步)事务日志到磁盘。这个变量的设置会影响数据库的ACID属性和性能。这个变量有三个可能的值:0,1,和2。
- 当
innodb_flush_log_at_trx_commit
设置为1
时,每次事务提交时,InnoDB都会立即将事务日志刷新到磁盘。这种设置可以提供最高的数据持久性,因为即使在数据库崩溃的情况下,也不会丢失已经提交的事务。这是默认的设置,也是实现完全ACID合规性所必需的。
- 当
innodb_flush_log_at_trx_commit
设置为0
时,InnoDB只会每秒钟将事务日志刷新到磁盘一次。这种设置可以提供最高的性能,但是在数据库崩溃的情况下,可能会丢失最近一秒钟内提交的事务。
- 当
innodb_flush_log_at_trx_commit
设置为2
时,每次事务提交时,InnoDB都会将事务日志写入操作系统的缓冲区,然后每秒钟将操作系统缓冲区的内容刷新到磁盘一次。这种设置在性能和数据持久性之间提供了一个折衷的选择。
Command-Line Format | --innodb-flush-log-at-trx-commit=# |
System Variable | |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies | No |
Type | Enumeration |
Default Value | 1 |
Valid Values | 0
1
2 |
innodb_flush_log_at_timeout
变量控制日志刷新频率。每N秒写并刷新一次。
Command-Line Format | --innodb-flush-log-at-timeout=# |
System Variable | |
Scope | Global |
Dynamic | Yes |
SET_VAR Hint Applies | No |
Type | Integer |
Default Value | 1 |
Minimum Value | 1 |
Maximum Value | 2700 |
Unit | seconds |
理解体会
日志缓冲区(Log Buffer)是数据库系统中的一个重要组件,它主要用于暂存即将写入到磁盘的日志记录。在MySQL的InnoDB存储引擎中,日志缓冲区是用于存储重做日志(Redo Log)的内存区域。
作用:
- 提高性能:日志缓冲区可以将多个小的日志写操作合并为一个大的写操作,从而减少磁盘I/O操作的次数,提高性能。
- 提供持久性:在事务提交时,InnoDB会将日志缓冲区中的重做日志写入到磁盘,从而确保即使在数据库崩溃的情况下,也能恢复已经提交的事务。
注意事项:
- 日志缓冲区的大小:日志缓冲区的大小由
innodb_log_buffer_size
变量控制。如果这个值设置得太小,那么日志缓冲区可能会频繁地溢出,导致日志过早地写入到磁盘,从而影响性能。如果这个值设置得太大,那么可能会浪费内存资源。
- 刷新策略:日志缓冲区的刷新策略由
innodb_flush_log_at_trx_commit
和innodb_flush_log_at_timeout
两个变量控制。你需要根据你的应用的需求和你的硬件资源来合理设置这两个变量。
快速跳转链接
【概念解析】启动
【概念解析】Day 1 - 10
【概念解析】Day 11 - 20
【概念解析】Day 21 - 30
【概念解析】Day 31 - 40
【概念解析】Day 41 - 50
【概念解析】Day 51 - 60
【概念解析】Day 61 - 70
【概念解析】Day 71 - 80
【概念解析】Day 81 - 90
- 作者:eachenkuang
- 链接:https://kuangyichen.com/article/industry-day62
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。