首页 > 数据库 >MySQL8中如何估算redo日志的大小

MySQL8中如何估算redo日志的大小

时间:2023-03-12 15:23:57浏览次数:45  
标签:log MB MySQL8 +-------------+ innodb mysql 日志 redo

先说公式:

mysql> pager grep sequence; show engine innodb status\G select sleep(60); show engine innodb status\G nopager;

mysql> select (<second_value> - <first_value>) / 1024 / 1024 as MB_per_min;

统计一分钟内生成了多少的redo。

在MySQL 8.0.30之前,redo相关的变量是innodb_log_file_size和innodb_log_files_in_group。缺省情况下,innodb创建两个redo日志文件,以循环的方式写入日志。innodb_log_file_size定义了每个日志文件的大小。

从MySQL 8.0.30开始,优化redo的变量是innodb_redo_log_capacity;一个好消息是该变量可以动态修改!innodb在mysql的数据目录下的#innodb_redo子目录下创建32个文件(每个文件的大小是innodb_redo_log_capacity/32),也可以通过变量innodb_log_group_home_dir指定相应的目录。

 

引入这些新的变量后,该如何估算redo的大小呢?

1.如果配置了innodb_redo_log_capacity,就是该变量设定的值,忽略innodb_log_file_size和innodb_log_files_in_group的设置

2.如果没有设置innodb_redo_log_capacity,但是配置了innodb_log_file_size和innodb_log_files_in_group,mysql就会将innodb_redo_log_capacity默认设置成innodb_log_files_in_group * innodb_log_file_size

3.如果上面三个变量都没有设置,就采用innodb_redo_log_capacity的默认值100MB

 

通常的建议是redo的大小能保存一个小时的日志量。从而避免频发检查点。

 

测试一下公式

mysqlslap来进行测试。不过,这样测试距离真实的应用场景还很远,在有些场景下还是有用的。

$ while true; do mysqlslap --auto-generate-sql -vv --concurrency=100 --iterations=200 --number-char-cols=7 --number-int-cols=10;

mysql> pager grep sequence; show engine innodb status\G select sleep(60); show engine innodb status\G nopager;

Log sequence number          3182015832

Log sequence number          3252604221

mysql> select (3252604221 - 3182015832) / 1024 / 1024 as MB_per_min;

+-------------+
| MB_per_min  |
+-------------+
| 67.31833363 |
+-------------+

以下是多次测量的结果:

mysql> select (3428540758 - 3366312894) / 1024 / 1024 as MB_per_min;
+-------------+
| MB_per_min  |
+-------------+
| 59.34511566 |
+-------------+

mysql> select (3517465187 - 3449605532) / 1024 / 1024 as MB_per_min;
+-------------+
| MB_per_min  |
+-------------+
| 64.71601009 |
+-------------+

 

借助PMM监控来分析redo的生成量

[MySQL]-->[InnoDB Details]-->[InnoDB Logging]

第一个要看的图表是Redo Generation Rate。在上面测试过程中,监控显示生成速度是1.1MB/s。即66MB/min(3.87GB/h)。和上面的公式差不多。

还有另外一个监控图表[InnoDB Log File Usage Hourly]。这里可以看到过去24h内的情况:

标签:log,MB,MySQL8,+-------------+,innodb,mysql,日志,redo
From: https://www.cnblogs.com/abclife/p/17187272.html

相关文章

  • mysql数据库binlog日志太大解决办法
    解决办法一:1.在mysql中修改查看binlog过期时间,这个值默认是0天,也就是说不自动清理,可以根据生产情况修改,目前环境是设置的60天。showvariableslike‘expire_logs_days......
  • jvm配置+OmitStackTraceInFastThrow 导致不打印日志具体信息
    jvm配置+OmitStackTraceInFastThrow导致不打印日志具体信息参考https://blog.51cto.com/u_15246373/5363973最后查到该问题的解决方法有三种1、查询历史日志,如果日志......
  • jdk-gc日志分析
    问题分析java进程自动killed分析java程序启动注入gc变量,打印gc日志-Xloggc:gc.log-XX:+PrintGCDetailsorjstat–gcutilpid在线gc日志分析https://gceasy.io/i......
  • mysql8.0.6+小版本升级
    概述mysql开源的数据库,发现漏洞及时升级mysql。mysql8.0.6+支持直接替换二进制内部完成升级开干envcentos7.xmysql8.0.6+8.0.6+支持in-place-upgrae升级备份->替......
  • 《SQL与数据库基础》19. 日志
    目录日志错误日志二进制日志日志格式日志查看日志删除查询日志慢查询日志本文以MySQL为例日志错误日志错误日志是MySQL中最重要的日志之一,它记录了当mysql启......
  • 机器学习日志 踩坑总结
    陆续更新中.飞桨AIStudio平台挺好的,要注意的是这个是linux系统,并且不知道为啥这里面的读入test文件是随机的?写了shuffle=False也没用。。。.很难注意的一个点,网络要注......
  • SQL2008R2 截断日志否则无法收缩数据库
    USE[master]GOALTERDATABASEFE_BASE5SETRECOVERYSIMPLEWITHNO_WAITGOALTERDATABASEFE_BASE5SETRECOVERYSIMPLEGOUSEFE_BASE5GODBCCSHRINKFILE(N'FE......
  • ubuntu下mysql8安装
    一、下载MySQLATPRepository网址:https://dev.mysql.com/downloads/repo/apt/dpkg-IXXX.deb二、更新sudoaptupdatesudoaptupgrade三、安装sudoaptinstal......
  • 如何在NET 6.0使用结构化的日志系统
     在我们的系统里面,有一项技术是必须使用的,那就是日志记录。我们在调试系统或者跟踪系统运行情况,都可以通过日志了解具体的情况。在项目开发中,我们有可能使用系统本身所带......
  • 日志框架之日志门面SLF4J的使用
    (日志框架之日志门面SLF4J的使用)SLF4J概述SLF4J(SimpleLoggingFacadeforJava)是一种Java编程语言的日志门面(loggingfacade)。它提供了一种将应用程序代码与特定......