MySQL 8.0 Dynamic Redo Log Sizing翻译

这篇具有很好参考价值的文章主要介绍了MySQL 8.0 Dynamic Redo Log Sizing翻译。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文是MySQL 8.0 Dynamic Redo Log Sizing[1]这篇文章的翻译。如有翻译不当的地方,敬请谅解,请尊重原创和翻译劳动成果,转载的时候请注明出处。谢谢!

这篇博文将讨论MySQL 8.0.30中引入的最新功能/特性:重做日志动态调整大小(dynamic redo log sizing)。除了InnoDB 缓冲池(buffer pool)大小之外,我们可以说合适的重做日志大小对于MySQL性能至关重要。有许多关于如何计算合适的重做日志大小的博客文章。其中最经典的博客文章之一来自 Baron:How to calculate a good InnoDB log file size[2](这篇博客文章是2008年发布的,但文中计算redo log大小的公式仍然是一个有效的公式)

现在,这个功能/特性试图解决哪个问题呢?

在MySQL中,缓冲池(buffer pool)和重做日志大小是不经常更改的参数设置。通常,这些参数是在数据库安装期间设置的;之后,它们就会被遗忘,直到一些问题出现为止。问题是过去它们是静态的,这意味着您必须重新启动MySQL才能使参数变更生效。

MySQL在MySQL 5.7中通过动态调整缓冲池(buffer bool)大小解决了缓冲池问题。现在,MySQL 8.0.30解决了重做日志的这个问题。调整重做日志大小非常简单明了:

mysql> SET GLOBAL innodb_redo_log_capacity = 2*1024*1024*1024;

此参数设置可将重做日志大小调整为比当前定义的值更大或更小的值。为了实现此目的,重做日志文件现在驻留在datadir指定的新目录中#innodb_redo中,除非你通过变量innodb_log_group_home_dir指定了不同的目录。这个目录下的重做日志文件有两种类型:普通重做日志文件和备用重做日志文件。普通重做日志文件是正在使用的重做日志文件。备用重做日志文件是那些等待使用的重做日志文件。InnoDB总共维护了32个重做日志文件,每个文件大小等于1/32 * innodb_redo_log_capacity;但是,修改innodb_redo_log_capacity参数后,重做日志文件大小可能会暂时有所不同。

重做日志文件使用#ib_redoN命名约定,其中N是重做日志文件编号。备用重做日志文件由后缀表示_tmp。以下示例显示#innodb_redo 目录中的重做日志文件,其中 18 个活动重做日志文件和 14 个备用重做日志文件按顺序编号。

$ ls
#ib_redo31  #ib_redo33 #ib_redo35  #ib_redo37 #ib_redo39  #ib_redo41 #ib_redo43  #ib_redo45 #ib_redo47  #ib_redo49_tmp  #ib_redo51_tmp  #ib_redo53_tmp  #ib_redo55_tmp  #ib_redo57_tmp  #ib_redo59_tmp  #ib_redo61_tmp
#ib_redo32  #ib_redo34 #ib_redo36  #ib_redo38 #ib_redo40  #ib_redo42 #ib_redo44  #ib_redo46 #ib_redo48  #ib_redo50_tmp  #ib_redo52_tmp  #ib_redo54_tmp  #ib_redo56_tmp  #ib_redo58_tmp  #ib_redo60_tmp  #ib_redo62_tmp

MySQL提供了几个状态变量用于监视重做日志和重做日志容量调整操作;例如,您可以通过查询Innodb_redo_log_resize_status以查看调整大小操作的状态:

mysql> SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_resize_status';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| Innodb_redo_log_resize_status |  OK   |
+-------------------------------+-------+

状态变量Innodb_redo_log_capacity_resized显示当前重做日志的容量限制:

mysql> SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_capacity_resized';
+----------------------------------+------------+
| Variable_name                    | Value      |
+----------------------------------+------------+
| Innodb_redo_log_capacity_resized | 3221225472 |
+----------------------------------+------------+

其他状态变量包括:

Innodb_redo_log_checkpoint_lsn
Innodb_redo_log_current_lsn
Innodb_redo_log_flushed_to_disk_lsn
Innodb_redo_log_logic_size
Innodb_redo_log_physical_size
Innodb_redo_log_read_only
Innodb_redo_log_uuid

MySQL 8.0.30 还引入了一些与此问题相关的新错误消息。其中一些包括:

ER_IB_MSG_LOG_WRITER_OUT_OF_SPACE
ER_IB_MSG_LOG_WRITER_ABORTS_LOG_ARCHIVER
ER_IB_MSG_LOG_WRITER_WAITING_FOR_ARCHIVER
ER_IB_MSG_LOG_WRITER_WAIT_ON_NEW_LOG_FILE
ER_IB_MSG_LOG_WRITER_ENTERED_EXTRA_MARGIN
ER_IB_MSG_LOG_WRITER_WAIT_ON_CONSUMER

如果您想查看更多信息,可以使用此链接[3]。所有与重做日志错误相关的消息都使用ER_IB_MSG_LOG_WRITER_ 命名约定。

估计重做日志容量

有了这些新的状态变量,我们可以使用以下查询来估计重做日志大小:

mysql> SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_current_lsn'SELECT SLEEP(60); SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_current_lsn';

根据上一个查询提供的输出,我们运行以下命令:

mysql > SELECT ABS(20641693317 - 20903377487) / 1024 / 1024 AS MB_per_min;
+--------------+
| MB_per_min   |
+--------------+
| 249.56147194 |
+--------------+
1 row in set (0.00 sec)

因此,在这种情况下,在重做日志文件中写入大约为250MB/分钟,那么一小时恰好是 250*60(1 小时),相当于 15GB。

已弃用的参数

为了实现这个新功能,MySQL 弃用了两个参数:innodb_log_files_in_group和innodb_log_file_size 。

如果您尝试在文件中设置它们my.cnf,它们将被忽略,并且错误日志中将打印警告:

2022-08-07T20:23:39.898370Z 0 [Warning] [MY-013869] [InnoDB] Ignored deprecated configuration parameter innodb_log_file_size. Used innodb_redo_log_capacity instead.
2022-08-07T20:23:39.898441Z 0 [Warning] [MY-013870] [InnoDB] Ignored deprecated configuration parameter innodb_log_files_in_group. Used innodb_redo_log_capacity instead.

结论

重做日志动态调整大小为 DBA 提供了更大的灵活性,以防万一需要调整重做日志大小,应用程序不能因MySQL重新启动而停止对外服务的情况。截至撰写本文时,还没有与此功能相关的错误报告。建议之一是检查您的备份工具是否与 MySQL 8.0.30 及其新功能兼容。最后,由于一些参数已经弃用,请务必检查现有的my.cnf配置文件。

参考资料

[1]

1: https://www.percona.com/blog/mysql-8-0-dynamic-redo-log-sizing/

[2]

2: https://www.percona.com/blog/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/

[3]

3: https://github.com/mysql/mysql-server/blob/8.0/share/messages_to_error_log.txt文章来源地址https://www.toymoban.com/news/detail-548673.html

到了这里,关于MySQL 8.0 Dynamic Redo Log Sizing翻译的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL - 为什么需要 redo log?

    为什么需要 redo log?: 数据恢复与一致性: Redo日志是数据库的事务日志,用于记录事务操作的细节,包括插入、更新和删除等。它确保了数据的持久性,即使在数据库发生崩溃或异常重启后,可以使用Redo日志来还原事务操作,以维护数据的一致性。 WAL机制支持: Redo日志是

    2024年02月06日
    浏览(31)
  • 必须了解的mysql三大日志-binlog、redo log和undo log

    MySQL实现事务、集群的主从复制,底层都离不开日志,所以日志是MySQL的精华所在。只有了解MySQL日志,才算是彻底搞懂MySQL 本文主要讲述MySQL的三大日志系统,Redo Log(重做日志)、Undo Log(恢复日志)、Bin Log(备份日志) Bin Log记录的是逻辑日志,即原始的SQL语句,是MySQL自

    2024年02月05日
    浏览(58)
  • MySQL知识学习03(三大日志详解 binlog、redo log、undo log)

    前言 MySQL 日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重要的还要属 二进制日志 binlog(归档日志) 和 事务日志 redo log(重做日志) 和 undo log(回滚日志) 。 1、redo log? redo log (重做日志)是 InnoDB 存储引擎独有的,它让

    2024年02月02日
    浏览(49)
  • mysql undo log、redo log、binlog、mvcc、Buffer Pool的关系

            MySQL中的undo log、redo log、binlog和MVCC(多版本并发控制)是数据库管理系统中的 重要概念,它们各自有不同的作用和关系。 Buffer Pool(缓冲池): 作为InnoDB存储引擎的核心组件,Buffer Pool用于缓存从磁盘读取的数据页。所有的数据修改首先发生在内存中的缓冲池里

    2024年02月02日
    浏览(45)
  • Mysql日志redo log、bin log、undo log 区别与作用及二阶段提交

    重做日志 作用:确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。 内容:物理格式的日志,记录的是物理数据页面的修改的信息,其redo log是顺序写入redo log file的物理文件中

    2024年02月03日
    浏览(51)
  • 【MySQL】change buffer,buffer pool,redo log,bin log,undo log的作用

    当需要更新一个数据页时,如果数据页在内存中就直接更新,而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InnoDB 会将这些更新操作缓存在 change buffer 中,这样就不需要从磁盘中读入这个数据页了。 在下次查询需要访问这个数据页的时候,将数据页

    2024年02月16日
    浏览(43)
  • MySQL 8.0 架构 之错误日志文件(Error Log)(1)

    【声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) MySQL 8.0 OCP (1Z0-908) 考点概要 MySQL 8.0 OCP (1Z0-908) 考点精析-安装与配置考点1:设置系统变量 【MySQL】控制MySQL优化器行为方法之optimizer_switch系统变量 【MySQL】MySQL系统变量(system v

    2024年01月22日
    浏览(56)
  • MySQL 8.0 OCP (1Z0-908) 考点精析-架构考点1:二进制日志文件(Binary log)

    【免责声明】文章仅供学习交流,观点代表个人,与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) MySQL中有多种类型的日志文件,这些日志可用于故障排除、性能调整和审计等目的,帮助找出正在发生的活动。 常见的日志文件包括: 日志类型 写入日志的信息 错误日志(

    2024年02月16日
    浏览(60)
  • Oracle (7)Online Redo Log Files

    目录 一、Oracle Online Redo Log Files及其相关内容介绍 1、Online Redo Log Files简介 2、Online Redo Log Files特点 3、Online Redo Log Files文件组 4、多路复用文件 5、联机重做日志文件工作方式 6、LGWR什么时候写重做 7、LS和LSN 8、删除Redo文件成员 9、删除重做文件组 10、重新定位和重命名 11、什

    2024年02月06日
    浏览(44)
  • MySQL 8.0 OCP (1Z0-908) 考点精析-性能优化考点4:慢速查询日志(slow query log)

    慢速查询日志(slow query log) 慢速查询日志(slow query log)主要用于查找超过指定时间、执行时间很长的SQL。 默认情况下这个功能是无效的,所以要启用慢速查询日志需要设置slow_query_log 为1(ON)。 慢速查询日志(slow query log)相关参数 下面我们看看慢速查询日志(slow query l

    2023年04月22日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包