阅读mysql文档

This commit is contained in:
asahi
2024-12-04 19:21:10 +08:00
parent 2976a65082
commit fef5679e49

View File

@@ -240,7 +240,7 @@ innodb中存在如下集中类型的fuzzy checkpoint
checkpoint_age = redo_lsn - checkpoint_lsn checkpoint_age = redo_lsn - checkpoint_lsn
async_water_mark = 0.75 * total_redo_log_file_size async_water_mark = 0.75 * total_redo_log_file_size
sync_water_mark = 0.9 * total_redo_log_file_size sync_water_mark = 0.9 * total_redo_log_file_size
```` ```
假设定义了2个redo log文件并且每个文件大小为1G那么`total_redo_log_file_size`的大小为2G. 假设定义了2个redo log文件并且每个文件大小为1G那么`total_redo_log_file_size`的大小为2G.
@@ -295,4 +295,35 @@ innodb采用了自适应的缓冲区刷新算法根据redo log的生成速率
### innodb_adaptive_flushing ### innodb_adaptive_flushing
通过`innodb_adaptive_flushing`变量,可以控制自使用刷新是否被启用,默认情况下其被启用。 通过`innodb_adaptive_flushing`变量,可以控制自使用刷新是否被启用,默认情况下其被启用。
## Log Buffer
log buffer为内存中的区域用于保存将要写入到磁盘log文件中的数据。log buffer的大小通过`innodb_log_buffer_size`来进行配置,默认其值为`64MB`
log buffer中的内容将会被定期刷新到磁盘中`当log buffer足够大时事务在提交之前无需将redo log内容刷到磁盘中`
### innodb_flush_log_at_trx_commit
`innodb_flush_log_at_trx_commit`用于控制如何将log buffer中的内容刷新到磁盘中。
默认情况下,该变量的值为`1`代表在事务提交时会将log buffer中的redo log内容刷新到磁盘为文件中。
### innodb_flush_log_at_timeout
`innodb_flush_log_at_timeout`控制刷新频率。
## Master Thread
master thread中的操作主要分为两部分
- 每秒钟执行一次的操作
- 每10s执行一次的操作
### 每秒钟执行一次的操作
master thread中每秒一次的操作包括如下内容
- 将log buffer中的内容刷新到磁盘即使对应事务尚未提交总是
- 合并插入缓冲(可能)
> 对于redo log即使事务当前尚未提交innodb仍然会每秒将log buffer中的内容刷新到缓冲区中
> 合并插入缓冲并不是每秒都会发生innodb会根据前1s内发生的IO次数是否小于5来判断是否合并插入缓冲。如果小于5次那么当前IO负载较小可以执行合并缓冲操作。
### 每10秒执行的操作
- 合并至多5个插入缓冲总是
- 将日志缓冲刷新到磁盘(总是)
- 删除无用的undo log页总是