返回顶部
首页 > 资讯 > 数据库 >MySQL5.7怎么在线收缩undo表空间
  • 729
分享到

MySQL5.7怎么在线收缩undo表空间

2023-06-06 01:06:59 729人浏览 薄情痞子
摘要

这篇文章主要讲解了“MySQL5.7怎么在线收缩undo表空间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mysql5.7怎么在线收缩undo表空间”吧!1. mysql 5.5时代的un

这篇文章主要讲解了“MySQL5.7怎么在线收缩undo表空间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mysql5.7怎么在线收缩undo表空间”吧!

1. mysql 5.5时代的undo log

在Mysql5.5以及之前,大家会发现随着数据库上线时间越来越长,ibdata1文件(即InnoDB的共享表空间,或者系统表空间)会越来越大,这会造成2个比较明显的问题:

(1)磁盘剩余空间越来越小,到后期往往要加磁盘;

(2)物理备份时间越来越长,备份文件也越来越大。

这是怎么回事呢?

原因除了数据量自然增长之外,在MySQL5.5以及之前,InnoDB的undo log也是存放在ibdata1里面的。一旦出现大事务,这个大事务所使用的undo log占用的空间就会一直在ibdata1里面存在,即使这个事务已经关闭。

那么问题来了,有办法把上面说的空闲的undo log占用的空间从ibdata1里面清理掉吗?答案是没有直接的办法,只能全库导出sql文件,然后重新初始化mysql实例,再全库导入。

2. MySQL 5.6时代的undo log

MySQL 5.6增加了参数innodb_undo_directory、innodb_undo_logs和innodb_undo_tablespaces这3个参数,可以把undo log从ibdata1移出来单独存放。

下面对这3个参数做一下解释:

(1)innodb_undo_directory,指定单独存放undo表空间的目录,默认为.(即datadir),可以设置相对路径或者绝对路径。该参数实例初始化之后虽然不可直接改动,但是可以通过先停库,修改配置文件,然后移动undo表空间文件的方式去修改该参数;

(2)innodb_undo_tablespaces,指定单独存放的undo表空间个数,例如如果设置为3,则undo表空间为undo001、undo002、undo003,每个文件初始大小默认为10M。该参数我们推荐设置为大于等于3,原因下文将解释。该参数实例初始化之后不可改动;

(3)innodb_undo_logs,指定回滚段的个数(早期版本该参数名字是innodb_rollback_segments),默认128个。每个回滚段可同时支持1024个在线事务。这些回滚段会平均分布到各个undo表空间中。该变量可以动态调整,但是物理上的回滚段不会减少,只是会控制用到的回滚段的个数。

实际使用方面,在初始化实例之前,我们只需要设置innodb_undo_tablespaces参数(建议大于等于3)即可将undo log设置到单独的undo表空间中。如果需要将undo log放到更快的设备上时,可以设置innodb_undo_directory参数,但是一般我们不这么做,因为现在SSD非常普及。innodb_undo_logs可以默认为128不变。

3. MySQL 5.7时代的undo log

那么问题又来了,undo log单独拆出来后就能缩小了吗?MySQL 5.7引入了新的参数,innodb_undo_log_truncate,开启后可在线收缩拆分出来的undo表空间。在满足以下2个条件下,undo表空间文件可在线收缩:

(1)innodb_undo_tablespaces>=2。因为truncate undo表空间时,该文件处于inactive状态,如果只有1个undo表空间,那么整个系统在此过程中将处于不可用状态。为了尽可能降低truncate对系统的影响,建议将该参数最少设置为3;

(2)innodb_undo_logs>=35(默认128)。因为在MySQL 5.7中,第一个undo log永远在系统表空间中,另外32个undo log分配给了临时表空间,即ibtmp1,至少还有2个undo log才能保证2个undo表空间中每个里面至少有1个undo log;

满足以上2个条件后,把innodb_undo_log_truncate设置为ON即可开启undo表空间的自动truncate,这还跟如下2个参数有关:

(1)innodb_max_undo_log_size,undo表空间文件超过此值即标记为可收缩,默认1G,可在线修改;

(2)innodb_purge_rseg_truncate_frequency,指定purge操作被唤起多少次之后才释放rollback segments。当undo表空间里面的rollback segments被释放时,undo表空间才会被truncate。由此可见,该参数越小,undo表空间被尝试truncate的频率越高。

4. MySQL 5.7的undo表空间的truncate示例

(1) 首先确保如下参数被正确设置:

# 为了实验方便,我们减小该值
innodb_max_undo_log_size = 100M
innodb_undo_log_truncate = ON
innodb_undo_logs = 128  
innodb_undo_tablespaces = 3
# 为了实验方便,我们减小该值
innodb_purge_rseg_truncate_frequency = 10

(2) 创建表:

mysql> create table t1(    -> id int primary key auto_increment,
   -> name varchar(200));
Query OK, 0 rows affected (0.13 sec)

(3)插入测试数据

mysql> insert into t1(name) values(repeat('a',200));Query OK, 1 row affected (0.01 sec)mysql> insert into t1(name) select name from t1;Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates:  Warnings:

mysql> insert into t1(name) select name from t1;Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates:  Warnings:

mysql> insert into t1(name) select name from t1;Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates:  Warnings:

...

mysql> insert into t1(name) select name from t1;Query OK, 8388608 rows affected (2 min 11.31 sec)
Records: 8388608  Duplicates:  Warnings:

这时undo表空间文件大小如下,可以看到有一个undo文件已经超过了100M:

-rw-r----- 1 mysql mysql  13M Feb 17 17:59 undo001-rw-r----- 1 mysql mysql 128M Feb 17 17:59 undo002-rw-r----- 1 mysql mysql  64M Feb 17 17:59 undo003

此时,为了,让purge线程运行,可以运行几个delete语句:

mysql> delete from t1 limit 1;Query OK, 1 row affected (0.00 sec)mysql> delete from t1 limit 1;Query OK, 1 row affected (0.00 sec)mysql> delete from t1 limit 1;Query OK, 1 row affected (0.00 sec)mysql> delete from t1 limit 1;Query OK, 1 row affected (0.00 sec)

再查看undo文件大小:

-rw-r----- 1 mysql mysql  13M Feb 17 18:05 undo001-rw-r----- 1 mysql mysql  10M Feb 17 18:05 undo002-rw-r----- 1 mysql mysql  64M Feb 17 18:05 undo003

可以看到,超过100M的undo文件已经收缩到10M了。

感谢各位的阅读,以上就是“MySQL5.7怎么在线收缩undo表空间”的内容了,经过本文的学习后,相信大家对MySQL5.7怎么在线收缩undo表空间这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL5.7怎么在线收缩undo表空间

本文链接: https://lsjlt.com/news/245497.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL5.7怎么在线收缩undo表空间
    这篇文章主要讲解了“MySQL5.7怎么在线收缩undo表空间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL5.7怎么在线收缩undo表空间”吧!1. MySQL 5.5时代的un...
    99+
    2023-06-06
  • MySQL5.7新特性——在线收缩undo表空间
    1. MySQL 5.5时代的undo log    在MySQL5.5以及之前,大家会发现随着数据库上线时间越来越长,ibdata1文件(即InnoDB的共享表空间,或者系统表空间)会...
    99+
    2024-04-02
  • Mysql中怎么实现在线回收undo表空间
    这期内容当中小编将会给大家带来有关Mysql中怎么实现在线回收undo表空间,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 Mysql5.61.1 相关参数MySQL ...
    99+
    2024-04-02
  • MySQL5.7回收undo log物理文件空间是怎样的
    这期内容当中小编将会给大家带来有关MySQL5.7回收undo log物理文件空间是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 &n...
    99+
    2024-04-02
  • Oracle 19c怎么缩减UNDO表空间和容量
    本篇内容主要讲解“Oracle 19c怎么缩减UNDO表空间和容量”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle 19c怎么缩减UNDO表空间和容量...
    99+
    2024-04-02
  • 如何进行UNDO表空间空间回收及切换
    这期内容当中小编将会给大家带来有关如何进行UNDO表空间空间回收及切换,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 1. 查看 undo 相...
    99+
    2024-04-02
  • oracle怎么收缩表空间数据文件
    要收缩Oracle数据库中的表空间数据文件,可以按照以下步骤操作:1. 首先,确认表空间中的数据文件是否可以收缩。可以使用以下命令查...
    99+
    2023-09-16
    oracle
  • undo表空间满了怎么办
    这篇文章将为大家详细讲解有关undo表空间满了怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 在插入数据或者update时,有时会报o...
    99+
    2024-04-02
  • 表空间问题----收缩空间方法:表空间中表的查法:扩展表空间
    收缩空间方法:一.不删除数据,收缩表空间的数据文件大小,释放磁盘空间查询对应表所在的表空间select OWNER,SEGMENT_NAME,TABLESPACE_NAME,BYTES/1024/...
    99+
    2024-04-02
  • Oracle表空间收缩方法是什么
    Oracle表空间收缩方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。应用背景:某些情况下,由于前期设计上没有考虑全面,导致表空间预建太大,远远超出实际...
    99+
    2023-06-06
  • 使用在线段收缩(ONLINE SEGMENT SHRINK)回收浪费的段空间
       ONLINE TABLE REDEFINITION(在线重定义表)(详见:《使用DBMS_REDEFINITION包执行在线重定义表(ONLINE TABLE REDEFINI...
    99+
    2024-04-02
  • oracle怎么缩小表空间
    要缩小Oracle数据库中的表空间,可以按照以下步骤进行操作:1. 确定需要缩小的表空间:首先确定要缩小的表空间的名称。2. 查看当...
    99+
    2023-09-16
    oracle
  • oracle 收缩表、清理碎片,释放空间
    可以用来收缩段,消除空间碎片的方法有两种: 1.alter table table_name move 需要注意: 1)move操作会锁表。(如果是很小的表,可以在线做。如果是大表一定要注意,会长...
    99+
    2024-04-02
  • mysql收缩共享表空间的方法是什么
    这篇文章主要讲解了“mysql收缩共享表空间的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql收缩共享表空间的方法是什么”吧! ...
    99+
    2024-04-02
  • Oracle undo表空间的作用是什么
    Oracle数据库的Undo表空间(Undo tablespace)用于存储事务执行过程中产生的撤销数据(Undo data)。它主...
    99+
    2024-04-02
  • MySQL中怎么回收表空间
    今天就跟大家聊聊有关MySQL中怎么回收表空间,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前置说明目前大部分MySQL数据库都是用的 InnoDB...
    99+
    2024-04-02
  • Mysql脏页flush及收缩表空间原理解析
    mysql脏页 由于WAL机制,InnoDB在更新语句的时候,制作了写日志这一个磁盘操作,就是redo log,在内存写完redo log后,就返回给客户端, 即更新成功。 把内存里的数据写入磁盘的过程,术语就是fl...
    99+
    2022-05-24
    Mysql 脏页flush 收缩表空间
  • mysql共享表空间的扩容、收缩和迁移
    本篇内容介绍了“mysql共享表空间的扩容、收缩和迁移”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • lvm收缩逻辑卷空间是怎样的
    今天就跟大家聊聊有关lvm收缩逻辑卷空间是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。[root@cspserver1 /]#  umount /softdata[...
    99+
    2023-06-05
  • oracle undo表空间释放的方法是什么
    Oracle中释放undo表空间的方法有以下几种: 使用回滚段管理器(Rollback Segment Management)进...
    99+
    2023-10-26
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作