MySQL内核月报 2014.11-MySQL· 5.7特性·在线Truncate undo log 表空间

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS SQL Server,基础系列 2核4GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介:

背景

Innodb使用undo log来实现MVCC,这意味着如果一个很老的事务长时间不提交,那么新产生的undo log都无法被及时清理掉。在MySQL 5.5及之前版本中,undo log是存储在ibdata中。从5.6开始可以使用独立的undo log表空间来存储undo。但是直到5.6,一旦undo log膨胀,依然没有任何办法为其 “减肥”。因此我们经常看到ibdata被膨胀到几十上百G。

改进

在MySQL5.7.5版本中终于增加了这个众望所归的功能,实现了在线truncate undo log的功能。对应的changeling entry如下:

InnoDB: You can now truncate undo logs that reside in undo tablespaces. This feature is enabled using the innodb_undo_log_truncate configuration option. For more information, see Truncating Undo Logs That Reside in Undo Tablespaces.

在能够使用该特性之前,需要先打开独立undo表空间,注意现在只能在install db的时候才能开启,因为在初始化阶段是写死占用了最小的几个space id的。这种实现方式。。。只能无限吐槽了。

有几个参数控制undo tablespace:

innodb_undo_directory:undo文件的存储目录。
innodb_undo_tablespaces:undo tablespace的个数,实现在线truncate undo,需要大于等于2,因为在truncate一个undo log文件时,要保证另外一个是可用的,这样就无需停止业务了。
innodb_undo_logs:undo回滚段的数量需要大于34。原因是1~32个回滚段会被临时表占用(5.7针对临时表做了大量优化),第33、34分配给undospace1 和undospace2。

这里有个比较有意思的问题,由于undo 回滚段总是从第一个undospace分配,如果每次从1开始,每次重启递增innodb_undo_logs,所有的回滚段都会被分配到第一个undo space,在truncate第一个undo space时,将无可用的undo回滚分配给正常的用户事务。

innodb_purge_rseg_truncate_frequency:用于控制purge回滚段的频度。 Innodb Purge操作的协调线程每隔这么多次purge事务分发后,就会触发一次History purge,并检查当前的undo log 表空间状态是否会触发truncate。
innodb_max_undo_log_size:控制最大undo tablespace文件的大小,超过这个阀值时才会去尝试truncate。truncate后的大小默认为10M。
innodb_undo_log_truncate:用于打开/关闭undo log 在线truncate特性,可动态调整。


undo log 的truncate操作由purge 协调线程发起,在truncate 某个undo log 表空间的过程中,保证有一个可用的undo log tablespace能提供给用户使用,从而实现所谓的在线truncate。


当选定一个需要truncate的undo log space时,需要检查其是否是可释放的,也就是说是否还有活跃的事务可能访问其中的回滚段。如果没有,就将该tablespace中的回滚段设置为不可分配,然后对undo log space文件进行truncate,并重新初始化到10M,初始化文件头等一系列操作。


这里引入了比较有意思的方法来保证truncate的原子性,即在开始truncate时,创建一个独立的文件,命名为undo_<space_id>_trunc.log,在做完truncate操作后,删除文件。如果在中间发生crash,崩溃恢复时发现该文件,会继续完成truncate操作。


更具体的参考WL#6965 及对应补丁Rev:8615


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
1月前
|
SQL 监控 关系型数据库
MySQL事务处理:ACID特性与实战应用
本文深入解析了MySQL事务处理机制及ACID特性,通过银行转账、批量操作等实际案例展示了事务的应用技巧,并提供了性能优化方案。内容涵盖事务操作、一致性保障、并发控制、持久性机制、分布式事务及最佳实践,助力开发者构建高可靠数据库系统。
|
1月前
|
存储 关系型数据库 MySQL
介绍MySQL的InnoDB引擎特性
总结而言 , Inno DB 引搞 是 MySQL 中 高 性 能 , 高 可靠 的 存 储选项 , 宽泛 应用于要求强 复杂交易处理场景 。
72 15
|
28天前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
60 6
|
28天前
|
关系型数据库 MySQL 数据库
MySql事务以及事务的四大特性
事务是数据库操作的基本单元,具有ACID四大特性:原子性、一致性、隔离性、持久性。它确保数据的正确性与完整性。并发事务可能引发脏读、不可重复读、幻读等问题,数据库通过不同隔离级别(如读未提交、读已提交、可重复读、串行化)加以解决。MySQL默认使用可重复读级别。高隔离级别虽能更好处理并发问题,但会降低性能。
|
5月前
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
223 23
|
6月前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
7月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
888 0
|
28天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
62 3
|
1月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
21天前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多