0
点赞
收藏
分享

微信扫一扫

redo log file该怎么配置大小

小暴龙要抱抱 2022-03-11 阅读 44

InnoDB日志保存着已经提交的数据变化,用于在崩溃恢复时把数据库的变化恢复到数据文件,除了崩溃恢复,其他时候都不会读日志文件。向日志文件写数据的方式是顺序写,这比离散写的效率要高很多,而向数据文件写数据通常是离散写比较多。

日志缓冲区是一个内存缓冲区,InnoDB使用它来缓冲重做日志事件,然后再将其写入磁盘。日志缓冲区的大小由系统参数innodb_log_buffer_size控制,默认是16 MB,在大多数情况下是够用的。

如果有大型事务或大量较小的并发事务,可以考虑增大innodb_log_buffer_size,这个参数在MySQL 8中可以动态设置。默认在datadir下有两个48MB的日志文件ib_logfile0和ib_logfile1。

查询redo 的日志产生量

InnoDB的日志产生量是衡量数据库繁忙程度的重要指标,也是设置日志文件大小的依据。查询日志产生量的相关信息有两个方法。

查询information_schema.innodb_metrics或sys.metrics视图中的对应计量值。

第二个方法是使用show engine innodb status命令查询日志产生量的相关信息,这些信息在输出的LOG部分,这种方法不需要激活InnoDB中的相关计量。

(1)视图查询

set global innodb_monitor_enable = 'log_lsn_%';

select name , count, status from information_schema.innodb_metrics where name like 'log_lsn%';

redo log file该怎么配置大小

这里的log_lsn_checkpoint_age是当前日志量减去最近一次检查点的日志量,等于log_lsn_current减去log_lsn_last_checkpoint,也就是日志文件的使用量,因

为对日志文件的写入是循环覆盖的,检查点之前的日志都已经写入数据文件了,不再需要了,可以被覆盖。这里看到的日志文件的使用量大约是9MB。

(2)show engine innodb status\G

redo log file该怎么配置大小

这里的lsn是184386847,最近一次检查点的lsn是178228435,计算出当前日志文件的使用量是这两个值之差:大约5.8M

redo log file该怎么配置大小

MySQL默认在数据目录下有两个48MB的日志文件,ib_logfile0和ib_logfile1。对于繁忙的数据库,这样的日志文件通常太小,因为当日志文件写满时,会触发检查点,把内存中的数据写入磁盘,小

的日志文件会频繁地触发检查点,增加写磁盘频率,引起系统性能下降。

大的日志文件能容纳的数据变化量大,会造成数据库在崩溃恢复时耗时较长,但新的MySQL版本的崩溃恢复速度已经很快了,因此把日志文件设置得大一些通常不会错,甚至可以设置得和InnoDB缓

存池一样大。

另外一些备份工具要备份在备份过程中产生的重做日志, 如果日志文件过小,备份工具备份日志的速度跟不上日志产生的速度时,需要备份的日志可能已经被覆盖了,例如XtraBackup工具可能会遇

到下面的错误:

xtrabackup: error: it looks like InnoDB log has wrapped around before xtrabackup could

process all records due to either log copying being too slow, or log files being too small.

判断如何配置redo log的大小

一个合理大小的日志文件应该可以容纳数据库在高峰时1到2个小时的数据变化。下面的例子是查询一分钟产生的日志量:

redo log file该怎么配置大小

在这60s期间,我们业务系统处于正常的运行状态,此次为实验环境,我做了简单的业务模拟操作。

select round((1167787001- 1159609513)*60/1024/1024) "1 hour log(MB)";

lsn号从1159609513增长到1167787001

一分钟redo log量:select round((1167787001- 1159609513)/1024/1024) "1 min log(MB)" =8MB

一小时redo log量:select round((1167787001- 1159609513)*60/1024/1024) "1 hour log(MB)"; =468MB

日志文件的大小有两个参数决定:

(1)innodb_log_files_in_group:表示一个组里有多少个文件,默认为2。

(2)innodb_log_file_size:表示单个日志文件的大小,默认为48MB。

因此如果保持innodb_log_files_in_group为2 不变,把innodb_log_file_size设置为460MB,可以容纳高峰期两个小时的日志。

修改日志文件大小的方法

修改日志文件大小的方法很简单,只需要修改参数文件中的innodb_log_file_size的设置,然后重新启动MySQL即可。不需要删除当前的日志文件,在启动过程中,MySQL会发现参数值和当前日志文件的大小不一样,然后自动删除旧的日志文件,并创建新的日志文件,在MySQL的错误日志里会有如下记录:

innodb_log_file_size=460M

redo log file该怎么配置大小

举报

相关推荐

0 条评论