8. Truncate undo表空间

要Truncate Undo 表空间,必须为MySQL实例配置至少两个undo表空间(两个undo表空间可确保一个undo表空间保持活动状态,另一个处于脱机状态以进行truncate)。undo表空间的数量由innodb_undo_tablespaces控制。,默认值0,最大值95

mysql> select @@innodb_undo_tablespaces;
+---------------------------+
| @@innodb_undo_tablespaces |
+---------------------------+
| 95 |
+---------------------------+
1 row in set (0.00 sec)

8.1 启用 Truncate undo表空间

要truncate undo表空间,请启用 innodb_undo_log_truncate

mysql> SET GLOBAL innodb_undo_log_truncate=ON;

当innodb_undo_log_truncate启用时,一个undo表空间超过参数innodb_max_undo_log_size设置的大小时,将被标记为truncate。

innodb_max_undo_log_size默认值为1024M,最大值2**64 -1,可以动态修改

修改方法:

mysql> SET GLOBAL innodb_max_undo_log_size=2147483648;
  1. undo 超出innodb_max_undo_log_size设置的表空间标记为truncate。选择用于truncate的undo 表空间是以循环方式执行的,以避免每次都truncate相同的undo 表空间。

  2. 驻留在所选undo tablespace中的回滚段将处于非活动状态,以便不会给他们分配新事务。允许完成当前使用回滚段的现有事务。

  3. 清除系统释放那些不需要的回滚段。

  4. 释放undo表空间中的所有回滚段后,将允许truncate操作,并将undo表空间truncate为其初始大小。undo表空间文件的初始大小取决于 innodb_page_size值。对于默认的16k InnoDB页面大小,初始undo表空间文件大小为10MiB。对于4k,8k,32k和64k页面大小,初始undo表空间文件大小分别为7MiB,8MiB,20MiB和40MiB。

  5. 重新激活回滚段,以便将它们分配给新事务。

8.2 加快 truncate undo表空间文件

在释放其回滚段之前,不能truncate表空间。通常,每调用一次purge系统就得purge128次才会释放回滚段。

要增加purge线程释放回滚段的频率,请减少innodb_purge_rseg_truncate_frequency例如:

mysql> select @@innodb_purge_rseg_truncate_frequency;
+----------------------------------------+
| @@innodb_purge_rseg_truncate_frequency |
+----------------------------------------+
| 128 |
+----------------------------------------+
1 row in set (0.00 sec) mysql> SET GLOBAL innodb_purge_rseg_truncate_frequency=32;

8.3 在线truncate undo表空间对性能的影响

当truncate undo表空间时,该表空间中的回滚段暂时停用。其他undo 表空间剩余的活动回滚段承担整个系统负载的责任,这可能会导致性能略有下降。性能下降程度取决于许多因素,包括:

  • undo 表空间数量
  • undo log数量
  • undo表空间大小
  • I/O速度
  • 现有的长事务
  • 系统负载

8. Truncate undo表空间的更多相关文章

  1. MySQL 5.7新特性之在线收缩undo表空间

    1. MySQL 5.5时代的undo log 在MySQL5.5以及之前,大家会发现随着数据库上线时间越来越长,ibdata1文件(即InnoDB的共享表空间,或者系统表空间)会越来越大,这会造成2 ...

  2. 【oracle11g,13】表空间管理2:undo表空间管理(调优) ,闪回原理

    一.undo空间原理: dml操作会产生undo数据. update时,sever process 会在databuffer 中找到该记录的buffer块,没有就从datafile中找并读入data ...

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

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 背 ...

  4. 如何删除回滚段状态为NEEDS RECOVERY的undo表空间

    环境:RHEL 6.4 + Oracle 11.2.0.4 背景:备份恢复的测试库在一次不完全恢复后,没有来及做有效的全备,又一次数据库故障导致数据库无法正常open. 只能离线部分数据文件打开数据库 ...

  5. 记一次ORACLE的UNDO表空间爆满分析过程

    这篇文章是记录一次ORACLE数据库UNDO表空间爆满的分析过程,主要整理.梳理了同事分析的思路.具体过程如下所示: 早上收到一数据库服务器的UNDO表空间的告警邮件,最早一封是7:55发出的(监控作 ...

  6. Oracle 11gR2 Database UNDO表空间使用率居高不下-转载

    客户的数据库是Oracle Database 11.2.0.3.0 for AIX 6.1 64bit的单机数据库.客户查询DBA_FREE_SPACE发现UNDO表空间的使用率高达98%以上.客户的 ...

  7. UNDO表空间设置

    flashback query和flashback table都是以用UNDO表空间的内容来进行恢复数据 查看undo内容保存的时间: SQL> show parameter undo_re N ...

  8. UNDO表空间损坏,爆满,ORA-600[4194]/[4193]错误解决

    模拟手工删除UNDO表空间 在ORADATA 中把UNDOTBS01.DBF 删除 模拟启库 SQL> STARUP; * 第 1 行出现错误: ORA-01157: 无法标识/锁定数据文件 2 ...

  9. oracle表空间查询维护命令大全之二(undo表空间)

    --undo表空间汇总 --查看全部的表空间名字 select name from v$tablespace; --创建新的UNDO表空间,并设置自己主动扩展參数; create undo table ...

随机推荐

  1. maven构建web项目,cannot be cast to javax.servlet.Servlet

    今天开发web的时候,需要用到servlet-api,于是在pom.xml中添加依赖 <dependency> <groupId>javax.servlet</group ...

  2. bzoj 1003: [ZJOI2006]物流运输【spfa+dp】

    预处理出ans[i][j]为i到j时间的最短路,设f[i]为到i时间的最小代价,转移显然就是 f[i]=min(f[j-1]+ans[j][i]*(i-j+1)+k); #include<ios ...

  3. Eclipse新建Maven webapp项目错误的解决方法

    新建webapp项目时出现如下错误: 解决步骤如下: 1.  右键点击项目,选择Properties,点击Java Build Path,将默认的JRE移除,点击右侧add Library,选择JRE ...

  4. 推荐一个比较专业的EasyUI中文网

    jQuery EasyUI中文网:http://www.jeasyui.cn,对EasyUI官网的完全整理翻译! 一个基于EasyUI构建的强大前端框架:TopJUI前端框架 致力于打造既美观实用又能 ...

  5. C# ref和out传递参数总结

    如有雷同,不胜荣幸,若转载,请注明 C#中ref和out传递参数总结,两个都可用来传递参数,ref使用时必须先进行初始化,out则不需要,只要在返回之前赋值即可,文字废话到此,下面直接上例子 ref例 ...

  6. Apache-kylin-2.0.0-bin-hbase1x.tar.gz的下载与安装(图文详解)

    首先,对于Apache Kylin的安装,我有话要说. 由于Apache Kylin本身只是一个Server,所以安装部署还是比较简单的.但是它的前提要求是Hadoop.Hive.HBase必须已经安 ...

  7. 贪心 HDOJ 5090 Game with Pearls

    题目传送门 /* 题意:给n, k,然后允许给某一个数加上k的正整数倍,当然可以不加, 问你是否可以把这n个数变成1,2,3,...,n, 可以就输出Jerry, 否则输出Tom. 贪心:保存可能变成 ...

  8. JAVA常用设计模式(静态化调用和实例化调用的区别,编辑可见 )

    用newInstance()与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类,且newInstance()只能调用无参构造函数. 最大的区别在于内存.静态方法 ...

  9. Java中“==”的使用,以及“==”和equal的比较

    int i02=59 ,这是一个基本类型,存储在栈中. Integer i03 =Integer.valueOf(59); 因为 IntegerCache 中已经存在此对象,所以,直接返回引用. In ...

  10. client系列、offset系列、scroll系列

    一.client系列 clientWidth/clientHeight    是我们设置的宽和高加上内边距(没有边框) clientLeft/clientTop 就是我们设置的边框值 二.offset ...