万答#18,MySQL8.0 如何快速回收膨胀的UNDO表空间

MySQL在线回收独立undo表空间 独立undo表空间回收的基本原理是通过将未使用的undo页归还给操作系统来释放空间。在MySQL 5.6版本之前,独立undo表空间的回收只能通过重启数据库实例来完成,这对于高可用性和在线服务来说是不可接受的。从MySQL 5.6版本开始,引入了在线回收独立undo表空间的功能,使得回收可以在不停止数据库的情况下进行。独立undo表空间的回收是一项关键任务,它可以释放未使用的空间,提高数据库性能和效率。执行存储过程后,MySQL将逐个回收每个表的独立undo表空间。关键字用于触发回收操作。 阅读详情

欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答

  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。

背景介绍

在项目选型中,在KVM(16c 16G ssd160G )的 Linux7.6 系统上部署了MYSQL MGR 集群 (GreatSQL 8.0.25)。

使用 sysbench 创建了100仓数据,且针对表创建为 partition 表,进行连续12小时的稳定下压测,来评估对应的架构的能够支撑的业务并发数,以及最高的TPS/QPS是多少。

在使用256并发,连续压测进行了12个小时之后,发现节点的SSD磁盘空间使用率达到 95% 以上,当时第一时间去查看 log 目录,log目录已经达到 100G+,以为是 binlog 设置的时间太长导致的 binlog 没有及时清理造成的,去清理 binlogbinlog 过期时间设置的 1800s,实际 binlog 和 MGR 的 relay-group 空间占用在11G左右而 du -sh * 查看到的日志文件大小时,发现其中undo大小1个是71G另一个4.1G,且MGR的3个节点的undo均是这个情况,急需释放空间。

但是MySQL8.0是否支持类型oracle的undo在线的替换来进行收缩呢,答案是肯定的,而且有些类似。

oracle/mysql undo 表空间设置自动扩展,如果业务上有跑批量或者大表的DML操作时,引起大事物,或针对多张大表关联更新时间较长,可能短时间内会将undo"撑大",oracle 我们可以通过创建一个新的 undo,通过在线的替换的方式,将膨胀的 undo 使用 drop 删除以释放空间。

mysql 8.0同样可以使用这种方式来处理,因大事物或长事物引起的undo过大占用空间较多的情况。

方法如下

  • 1、添加新的undo文件undo003。mysql8.0中默认innodb_undo_tablespace为2个,不足2个时,不允许设置为inactive,且默认创建的undo受保护,不允许删除。

  • 2、将膨胀的 undo 临时设置为inactive,以及 innodb_undo_log_truncate=on,自动 truncate 释放膨胀的undo空间。

  • 3、重新将释放空间之后的undo设置为active,可重新上线使用。

具体操作如下

[greatdb@mysql ~]$ mysql -ugreatsql -pgreatsql -h172.16.130.15 -P3307    
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 74
Server version: 8.0.25-15 GreatSQL, Release 15, Revision c7feae175e0

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql[(none)]> show variables like '%undo%';
+--------------------------+-----------------------------+
| Variable_name            | Value                       |
+--------------------------+-----------------------------+
| innodb_max_undo_log_size | 4294967296                  |
| innodb_undo_directory    | /app/dbdata/sqlnode3306/log |
| innodb_undo_log_encrypt  | OFF                         |
| innodb_undo_log_truncate | ON                          |
| innodb_undo_tablespaces  | 2                           |
+--------------------------+-----------------------------+
5 rows in set (0.01 sec)

1、查看undo大小

mysql[(none)]> system du -sh  /app/dbdata/datanode3307/log/undo*
4.1G /app/dbdata/datanode3307/log/undo_001
71G /app/dbdata/datanode3307/log/undo_002       -----12小时连续稳定性压测,导致节点undo过大,达到71G

2、添加新的undo表空间undo003。系统默认是2个undo,大小设置4G

mysql[(none)]> 
mysql[(none)]> create undo tablespace undo003 add datafile '/app/dbdata/datanode3307/log/undo003.ibu';
Query OK, 0 rows affected (0.21 sec)
注意:创建添加新的undo必须以.ibu结尾,否则触发如下错误提示
mysql[(none)]> create undo tablespace undo003 add datafile '/app/dbdata/datanode3307/log/undo_003.' ;
ERROR 3121 (HY000): The ADD DATAFILE filepath must end with '.ibu'.

3、查看系统中的undo表空间信息,如下:

mysql[(none)]> select * from information_schema.INNODB_TABLESPACES where  name like '%undo%';
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+-------------+----------------+-----------------+----------------+---------------+------------+--------+
| SPACE      | NAME            | FLAG | ROW_FORMAT | PAGE_SIZE | ZIP_PAGE_SIZE | SPACE_TYPE | FS_BLOCK_SIZE | FILE_SIZE   | ALLOCATED_SIZE | AUTOEXTEND_SIZE | SERVER_VERSION | SPACE_VERSION | ENCRYPTION | STATE  |
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+-------------+----------------+-----------------+----------------+---------------+------------+--------+
| 4294967279 | innodb_undo_001 |    0 | Undo       |     16384 |             0 | Undo       |          4096 |  4311744512 |     4311764992 |               0 | 8.0.25         |             1 | N          | active |
| 4294967278 | innodb_undo_002 |    0 | Undo       |     16384 |             0 | Undo       |          4096 | 76067897344 |    76068229120 |               0 | 8.0.25         |             1 | N          | active |
| 4294967277 | undo003         |    0 | Undo       |     16384 |             0 | Undo       |          4096 |    16777216 |       16777216 |               0 | 8.0.25         |             1 | N          | active |
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+-------------+----------------+-----------------+----------------+---------------+------------+--------+
3 rows in set (0.03 sec)

4、查看到上述视图中 innodb_undo_002 大小达到76067897344 (约71G)其状态state为active。手动将其设置为 inactive,使其自动触发 innodb_undo_log_truncate 回收。

mysql[(none)]> alter undo tablespace innodb_undo_002 set inactive;
Query OK, 0 rows affected (0.00 sec)

5、查看对应视图如下

mysql[(none)]> select * from information_schema.INNODB_TABLESPACES where  name like '%undo%';
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+------------+----------------+-----------------+----------------+---------------+------------+--------+
| SPACE      | NAME            | FLAG | ROW_FORMAT | PAGE_SIZE | ZIP_PAGE_SIZE | SPACE_TYPE | FS_BLOCK_SIZE | FILE_SIZE  | ALLOCATED_SIZE | AUTOEXTEND_SIZE | SERVER_VERSION | SPACE_VERSION | ENCRYPTION | STATE  |
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+------------+----------------+-----------------+----------------+---------------+------------+--------+
| 4294967279 | innodb_undo_001 |    0 | Undo       |     16384 |             0 | Undo       |          4096 | 4311744512 |     4311764992 |               0 | 8.0.25         |             1 | N          | active |
| 4294967151 | innodb_undo_002 |    0 | Undo       |     16384 |             0 | Undo       |          4096 |   16777216 |        2179072 |               0 | 8.0.25         |             1 | N          | empty  |
| 4294967277 | undo003         |    0 | Undo       |     16384 |             0 | Undo       |          4096 |   16777216 |       16777216 |               0 | 8.0.25         |             1 | N          | active |
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+------------+----------------+-----------------+----------------+---------------+------------+--------+
3 rows in set (0.01 sec)

此时可以查看对应操作系统目录中的 undo_002大小,innodb_undo_002 FILE_SIZE 16777216 默认大小 2179072 ,STATE 为 empty

mysql[(none)]> system du -sh  /app/dbdata/datanode3307/log/undo*
4.1G /app/dbdata/datanode3307/log/undo_001
2.1M /app/dbdata/datanode3307/log/undo_002
16M /app/dbdata/datanode3307/log/undo003.ibu

6、重新将其设置为active状态

mysql[(none)]> alter undo tablespace innodb_undo_002 set active;
Query OK, 0 rows affected (0.01 sec)
mysql[(none)]> select * from information_schema.INNODB_TABLESPACES where  name like '%undo%';
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+------------+----------------+-----------------+----------------+---------------+------------+--------+
| SPACE      | NAME            | FLAG | ROW_FORMAT | PAGE_SIZE | ZIP_PAGE_SIZE | SPACE_TYPE | FS_BLOCK_SIZE | FILE_SIZE  | ALLOCATED_SIZE | AUTOEXTEND_SIZE | SERVER_VERSION | SPACE_VERSION | ENCRYPTION | STATE  |
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+------------+----------------+-----------------+----------------+---------------+------------+--------+
| 4294967279 | innodb_undo_001 |    0 | Undo       |     16384 |             0 | Undo       |          4096 | 4311744512 |     4311764992 |               0 | 8.0.25         |             1 | N          | active |
| 4294967151 | innodb_undo_002 |    0 | Undo       |     16384 |             0 | Undo       |          4096 |   16777216 |        2195456 |               0 | 8.0.25         |             1 | N          | active |
| 4294967277 | undo003         |    0 | Undo       |     16384 |             0 | Undo       |          4096 |   16777216 |       16777216 |               0 | 8.0.25         |             1 | N          | active |
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+------------+----------------+-----------------+----------------+---------------+------------+--------+
3 rows in set (0.01 sec)

7、有人说,为什么直接不能直接针对膨胀的undo设置为inactive,系统默认创建的undo表空间默认2个,处于active小于2个时,会有如下提示:

mysql[(none)]> mysql[(none)]> show variables like 'innodb_undo_tablespaces';
+--------------------------+-----------------------------+
| Variable_name            | Value                       |
+--------------------------+-----------------------------+
| innodb_undo_tablespaces  | 2                           |
+--------------------------+-----------------------------+
5 rows in set (0.01 sec)
mysql[(none)]> alter undo tablespace innodb_undo_002 set inactive;
ERROR 3655 (HY000): Cannot set innodb_undo_002 inactive since there would be less than 2 undo tablespaces left active.
mysql[(none)]> 

8、新创建添加的可以正常设置为inactive之后,使用drop方式删除,如下:

mysql[(none)]> alter undo tablespace undo003 set inactive;
Query OK, 0 rows affected (0.00 sec)
mysql[(none)]> drop undo tablespace undo003;
Query OK, 0 rows affected (0.01 sec)
mysql[(none)]> select * from information_schema.INNODB_TABLESPACES where  name like '%undo%';
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+------------+----------------+-----------------+----------------+---------------+------------+--------+
| SPACE      | NAME            | FLAG | ROW_FORMAT | PAGE_SIZE | ZIP_PAGE_SIZE | SPACE_TYPE | FS_BLOCK_SIZE | FILE_SIZE  | ALLOCATED_SIZE | AUTOEXTEND_SIZE | SERVER_VERSION | SPACE_VERSION | ENCRYPTION | STATE  |
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+------------+----------------+-----------------+----------------+---------------+------------+--------+
| 4294967279 | innodb_undo_001 |    0 | Undo       |     16384 |             0 | Undo       |          4096 | 4311744512 |     4311764992 |               0 | 8.0.25         |             1 | N          | active |
| 4294967151 | innodb_undo_002 |    0 | Undo       |     16384 |             0 | Undo       |          4096 |   16777216 |        2244608 |               0 | 8.0.25         |             1 | N          | active |
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+------------+----------------+-----------------+----------------+---------------+------------+--------+
2 rows in set (0.01 sec)

总结

通过以上操作我们就可以针对unod因遇到大事务,undo持续增长的情况下,通过新增临时undo,手动释放系统默认的2个undo表空间 大小。

当然截断 UNDO 表空间文件对数据库性能是有一定的影响的,尽量在相对空闲时间进行。

当UNDO表空间被截断时,UNDO表空间中的回滚段将被停用。其他UNDO表空间中的活动回滚段负责整个系统负载,这可能会导致性能略有下降。性能受影响的程度取决于许多因素:

  • 1、UNDO表空间的数量
  • 2、UNDO记录日志的数据量
  • 3、UNDO表空间大小
  • 4、磁盘I/O系统的速度
  • 5、现有长期运行的事务

那么避免潜在性能影响的最简单的方法:

  • 1、就是通过 create undo tablespace undo_XXX add datafile '/path/undo_xxx.ibu';多添加几个UNDO表空间。
  • 2、磁盘上如果条件允许采用高性能的SSD来存储数据,存储REDO,UNDO等。
  • 引起UNDO过度膨胀的原因大多数是因为基础数据量大,业务并发高,表关联操作较频繁,出现大且长的事物操作,导致UNDO一直处于active状态,不能及时释放回滚段等原因,大事物引起的问题由来已久,即使我们能规避99%的大事物,但实际业务遇到那1%的大事物刚性需求发过来时,这还要我们的MySQL各种场景,各种架构和业务层好好磨合磨合。

Enjoy GreatSQL :)

文章推荐:

GreatSQL MGR FAQ https://mp.weixin.qq.com/s/J6wkUpGXw3YkyEUJXiZ9xA

万答#12,MGR整个集群挂掉后,如何才能自动选主,不用手动干预 https://mp.weixin.qq.com/s/07o1poO44zwQIvaJNKEoPA

『2021数据技术嘉年华·ON LINE』:《MySQL高可用架构演进及实践》 https://mp.weixin.qq.com/s/u7k99y6i7riq7ScYs7ySnA

一条sql语句慢在哪之抓包分析 https://mp.weixin.qq.com/s/AYibbzl860D90rOeyjB6IQ

万答#15,都有哪些情况可能导致MGR服务无法启动 https://mp.weixin.qq.com/s/inSGpd0Q_XIl2Mb-VsvNsA

技术分享 | 为什么MGR一致性模式不推荐AFTER https://mp.weixin.qq.com/s/rNeq479RNsklY1BlfKOsYg

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

Gitee: https://gitee.com/GreatSQL/GreatSQL

GitHub: https://github.com/GreatSQL/GreatSQL

Bilibili: https://space.bilibili.com/1363850082/video

微信&QQ群: 可搜索添加GreatSQL社区助手微信好友,发送验证信息“加群”加入GreatSQL/MGR交流微信群

QQ群:533341697 微信小助手:wanlidbc

本文由博客一文多发平台 OpenWrite 发布!

UM2 3D 打印机 DIY 实践 (2) 电路篇 涉及到的东西非常多,实际上后面还会讲到。主要部件清单: 主板 mega2560 + Ramps1.4 + LCD12864 各一张 42 x38mm x3,xyz 轴各一台 42 x23mm x1,用在挤出机 泰坦远程挤出机 x1 TMC2225 驱动板 x4, 替代a4988、TMC2208,静音效果好,性价比高 s-250-12v 20A开关电源 x1。功率必须足够大,宁可选大一点的 大功率 MOS 管,25A x1 NTC . 阅读详情

相关推荐

GPU大规模集群运维

CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的通用并行计算平台和程序模型,该架构使GPU能够解决复杂的计算问题。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。开发人员可以使用C语言来为CUDA架构编写程序,所编写出的程序可以在支持CUDA的处理器上以超高性能运行。CUDA官方文档CUDA的软件环境允许开发者使用C++等高级编程语言开发程序。

weixin_42795092的博客 1738

mysql怎么查看undo文件大小_如何计算自动管理的UNDO表空间大小

AUM(自动 undo 管理,Automatic Undo Management)几乎不需要配置。您基本上只需要定义将前映像保持可用的时间量。这是通过参数AUTO UNDOAUM(自动 undo 管理,Automatic Undo Management)几乎不需要配置。您基本上只需要定义将前映像保持可用的时间量。这是通过参数 UNDO_RETENTION 控制的,以秒为单位定义。因此,值 900 ...

weixin_30647423的博客 604

OpenVins解析:基于滤波框架的SLAM

这一方式存在的关键问题是匹配耗时很长,对性能影响显著。可以参考ORBSLAM3中的匹配方式来对其优化,比如左右目匹配可以在极线上搜索,前后帧可以利用运动先验投影匹配。理论上加入路标点会提升精度,代价是增加了计算量。着重说下基于描述子的匹配:OpenVins中匹配的方式是robust_match(),里面是调用的opencv的。openvins中不仅仅进行了传统的MSCKF更新(状态向量中不包含路标点),还在。中进行了包含路标点的估计更新。图像帧到来时,利用IMU递推得到的位姿给该图像帧赋初值。

qq_18076309的博客 4076

MySQL系列-undo

之前讨论过redo的作用,那么与之对应的便是undo了,undo记录了事务的行为,实现了MySQL的回滚和MVCC。当update、delete或者insert一条数据,都会对应的在undo中生成一个前镜像信息,这个前镜像是以逻辑方式存储的(即反向更改的SQL语句,delete对应insert,insert对应delete),当需要rollback时,通过undo记录信息进行rollback,同Oracle undo一样,MySQL undo也是通过segment管理具体事务的,但是存储在共享表空间中(ib

renyanjie123的博客 3564

用HFSS复现经典论文:从零搭建带孔缝屏蔽箱体模型(附完整建模步骤与避坑指南)

本文详细介绍了如何使用HFSS电磁仿真软件复现经典论文中的带孔缝屏蔽箱体模型,包括从零搭建模型、设置激励与边界条件、求解优化及结果验证的全过程。特别提供了建模中的布尔运算陷阱、激励设置技巧等实操难点的避坑指南,帮助工程师和学生深入理解电磁屏蔽效能研究。

weixin_30530339的博客 158

YOLOv8改进:在C2F模块中引入RepGhost Bottleneck模块

C2F类是YOLOv8中的C2F模块的实现,它包含一个RepGhostBottleneck模块、一个卷积层和一个批归一化层。通过在C2F模块中引入RepGhost Bottleneck模块,我们可以在保持计算效率的同时提升模型的表达能力。这是因为RepGhost Bottleneck模块通过引入重复的卷积核来扩展模型的感受野,从而增加了模型对不同尺度目标的感知能力。RepGhost Bottleneck是一种用于卷积神经网络的改进模块,它可以在保持计算效率的同时提升模型的表达能力。希望以上内容对你有帮助!

IlgCrystal的博客 1306

mysql 表空间收缩_mysql表碎片清理和表空间收缩

mysql表碎片清理和表空间收缩(即清理碎片后report_site_day.ibd文件磁盘空间减小,该方案基于独立表空间存储方式)OPTIMIZETABLE [tablename],当然这种方式只适用于独立表空间清除碎片的优点:降低访问表时的IO,提高mysql性能,释放表空间降低磁盘空间使用率OPTIMIZE TABLE ipvacloud.report_site_day;对myisam表有用...

weixin_39794340的博客 908

【WRF-FDDA】观测 Obs nudging 的配置与使用说明(中)

WRF-FDDA

WW、forever的博客 281

mysql+清理undo_undo清理 &redo 持久化

为了进行mvcc(多版本并发控制)与回滚,innodb单独管理着undo空间(undo space、rollback segment)。1)当执行update语句后,即使不执行commit,数据列也会在innodb缓冲池修改。但是innodb存储引擎无法确定用户执行update语句后,执行rollback操作还是commit操作。因此为了应对用户可能rollback操作的情形,先要将修改之前的数据...

weixin_34734156的博客 1825

SIMULINK开发项目实例 1000 例专栏之第960例--基于电力系统稳定性的建模与仿真场景:-含分布式电源的配电网电压稳定性研究

间歇性与随机性:例如,太阳能依赖于日照强度,风能依赖于风速,这使得它们的输出功率具有不确定性。逆变器接口:大多数分布式电源通过逆变器接入电网,这对电网的动态响应特性产生了影响。位置分散:通常分布在用户侧或靠近负荷中心的位置。本文详细介绍了如何使用Simulink结合Simscape Electrical 构建一个用于研究含分布式电源配电网电压稳定性的模型,并提供了详细的仿真流程说明。

xiaoheshang_123的博客 153

用 Docker 一键部署 SillyTavern酒馆 mac/windows/linux通用教程,我再也不手动折腾了!

本文介绍了如何使用 Docker 一键部署 SillyTavern 项目,适用于 Mac、Windows 和 Linux 系统。SillyTavern 是一个本地部署的大语言模型聊天界面,支持多种插件和扩展。文章详细说明了安装 Docker、拉取项目、启动容器、配置白名单、启用插件等步骤,并提供了常见问题的解决方法。通过 Docker 部署,用户可以避免繁琐的手动配置,快速搭建和运行 SillyTavern,适合希望简化部署流程的用户。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2622

mysql undo_mysql的undo段回收

一.mysql 5.6的undo段回收undo段的数据是放到共享表空间中,如果数据库有大量插入或者更新会不断写入大量的undo log.此时的undo log不能自动回收剩余的空间.mysql 5.6是在安装数据库之前修改undo的参数,将undo log从共享表空间分离出来,安装后就不能修改,mysql 5.7可以用静态参数进行调整.(1).修改my.cnf启动参数文件vim /etc/my.c...

weixin_32865081的博客 385

YOLO11改进-注意力-引入Deformable Large Kernel Attention (DLKA) 解决多尺度、小目标、遮挡等问题

Deformable Large Kernel Attention (DLKA) 是一种用于视觉任务的注意力机制,旨在提升模型在处理不同尺寸和形状对象时的灵活性和性能。DLKA 的设计灵感源自传统的注意力机制,但通过引入可变形核(deformable kernel)来增强对局部特征的适应能力。

qq_64693987的博客 4042

mysql的undo段回收

一.mysql 5.6的undo段回收    undo段的数据是放到共享表空间中,如果数据库有大量插入或者更新会不断写入大量的undo log.此时的undo log不能自动回收剩余的空间.mysql 5.6是在安装数据库之前修改undo的参数,将undo log从共享表空间分离出来,安装后就不能修改,mysql 5.7可以用静态参数进行调整.(1).修改my.cnf启动参数文件vim /etc/...

weixin_33852020的博客 334

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MySQL8.0 如何快速回收膨胀的UNDO表

背景介绍 项目选型中,在KVM(16c 16G ssd160G )的 Linux7.6系统上部署了MySQL MGR集群 (GreatSQL 8.0.25)。 使用 sysbench 创建了100仓数据,且针对表创建为 partition 表,进行连续12小时的稳定下压测,来评估对应的架构能支撑的业务并发数,以及最高的TPS/QPS是多少。 在使用256并发连续进行12小时压测后,发现节点的SSD磁盘空间使用率达到 95% 以上,当时第一时间查看log目录,发现log目录已经达到 100G+,以为是 bi

GreatDB的博客 743

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

mysql undo表空间大小_MySQL设置undo为独立表空间

博客文章除注明转载外,均为原创。采用独立undo表空间,再也不用担心undo会把 ibdata1 文件搞大;也给我们部署不同IO类型的文件位置带来便利,对于并发写入型负载,我们可以把undo文件部署到单独的高速存储设备上.在数据库初始化的时候就使用如下三个参数innodb_undo_tablespaces=3 #设置为3个innodb_undo_logs=128#默认128个innodb_undo...

weixin_28784019的博客 685

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MySQL的特殊的表膨胀

再次写入insert into select写入,但是执行回退后。数据未能写入,但是表现在大小是163840字节。结果是表变大了,这个结果可能和大多数人想象中的不一样。大多数人可能觉得回退后,数据没有写入数据文件。这个迁移过程我知道,中途还有insert into select的动作。但是处理的数据有点大,导致处理失败。其实很多数据库即使处理大事务,但是提交会很快。因为这些过程的数据和日志也都一直在写,所以最后提交很快。那也就是这里可以证明,为什么案例实际导入10G,但是占用空间很大。

xuexiaogang的专栏 403

MySQL批量导入数据时,为何表空间膨胀了N倍

本文目录问题缘起排查思路问题发现问题缘起同事在客户现场利用DTS工具,从A实例将数据迁移到B实例过程中,发现几乎稍大点的表在迁移完成后,目标端表空间大小差不多都是源端的3倍,也就是说表空间膨胀了2倍。排查思路对这篇文章《叶问》第16期有印象的话,应该还能记得,数据迁移(导入导出)过程中,也包括主从复制场景,导致表空间膨胀的原因有几种:MySQL表默认是InnoDB引擎且目前索引只支持B+树索引...

老叶茶馆 778

MySQL单表膨胀优化之MyCat分库分表

MySQL的单表达到多少量级时性能会下降?宽表在千万量级,窄表要好一点在1200W左右。但是MySQL单表达到1500W时性能开始急剧下降! 这里先抛出一道面试题: Q1:一亿的用户表,怎么做优化? Q2:两个实体,用户和订单,数据量都过亿 要求: 1.从用户角度快速查询订单 2.从订单角度快速查用户 怎么设计表? 【1】常见数据库中间件 分布式数据库中间件有TDDL、Sharding-JDBC...

小小默:进无止境 4928

破解gh-ost变更导致MySQL表膨胀之谜|得物技术

MySQL DDL变更导致表空间膨胀问题分析 本文分析了MySQL在进行DDL变更时导致表空间膨胀的案例。通过复现问题发现,当单行记录过大(5k左右)时,结合变更工具的特殊机制(先写入大主键记录),会触发MySQL的页分裂缺陷,导致一个16k的页仅存储1条记录,浪费2/3空间,最终使表空间膨胀近100%。同时,这种异常页分裂还会导致统计信息严重偏差,进而引发部分SQL出现慢查询。文章详细介绍了InnoDB索引结构、页分裂机制和当前DDL变更流程,并提出了临时解决方案(原生alter table)和长期优化方

SmartCodeTech的博客 1618

MySQL磁盘空间耗尽(表膨胀/日志膨胀)排查与优化全流程

MySQL磁盘空间耗尽问题通常表现为数据库不可写,常见原因包括表数据过大、binlog和undolog积压、临时文件膨胀等。排查步骤涉及检查磁盘使用情况、查看binlog和undolog状态、监控长事务等。优化方案包括清理binlog、优化undolog、表归档与冷热分离、表膨胀收缩、relaylog优化、临时表与内存优化以及文件系统扩容。生产示例展示了具体的清理和优化操作。监控与预防措施包括监控磁盘空间、binlog文件数、undolog空间等,并设置警戒值。总结指出,定期清理binlog、控制事务大小、

weixin_43991457的博客 954

mysql 5.7 undo truncate 功能

mysql> select version() ; +-------------------------------------------+ | version()                                 | +-------------------------------------------+ | 5.7.17_log

wll的专栏 6143

mysql undo001_MySQL之UNDO及MVCC、崩溃恢复

UNDO特性:避免脏读、事务回滚、非阻塞读、MVCC、崩溃恢复崩溃恢复:redo前滚、undo回滚长事务、大事务:危害、判断、处理UNDO优化:实现undo分离、收缩undo表空间0、undo物理存储研究1>ibdata第五个数据块(系统事务表)中存储着128个undo段的段头块的地址2>每一个undo段头块有1024行,两行记录一个事务,一共可以记录512个事务3>一个数据行中...

weixin_39582656的博客 2045

mysql undo表空间大小_独立undo表空间在线回收

1.mysql5.5的版本上InnoDB undo是放在系统表空间即ibdata file文件中,这样如果有比较大的事务(即需要生成大量undo的),会撑大ibdata数据文件,虽然空间可以重用,但文件大小不能更改。关于回滚段的,只有这个主要的参数,用来设置多少个rollback segment。mysql> show global variables like '%rollback_seg...

weixin_31046701的博客 258

mysql 5.7 undo redo 空间回收

undo redo 空间回收 InnoDB存储引擎中,Undo log一直都是事务多版本控制中的核心组件,它具有以下的核心功能:     事务的回退:事务在处理过程中遇到异常的时候可以rollback(撤销)所做的全部修改。     事务的恢复:数据库实例崩溃时,将磁盘的不正确数据恢复到交易前。     读一致性:被查询的记录有事务占用,转向回滚段找事务开始前的数据镜像。 Undo在完成...

cdrcsy的专栏 1338

mysql undo log回收_独立undo表空间在线回收

1、MySQL5.5的版本上InnoDB undo是放在系统表空间即ibdata file文件中,这样如果有比较大的事务(即需要生成大量undo的),会撑大ibdata数据文件,虽然空间可以重用, 但文件大小不能更改。关于回滚段的,只有这个主要的参数,用来设置多少个rollback segment。mysql> show global variables like '%rollback_se...

weixin_31937913的博客 486
上一篇: Macos系统编译percona及部分函数在Macos系统上运算差异
下一篇: 技术分析 | 通过DML语句浅谈binlog和redo log
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值