首页 > 数据库 >【YashanDB数据库】大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo blocks

【YashanDB数据库】大事务回滚导致其他操作无法执行,报错YAS-02016 no free undo blocks

时间:2024-08-06 10:40:10浏览次数:8  
标签:回滚 rollback 最大值 UNDO 索引 报错 undo 执行

问题现象

客户将一个100G的表的数据插入到另一个表中,使用insert into select插入数据。从第一天下午2点开始执行,到第二天上午10点,一直未执行完毕。

由于需要实施下一步操作,客户kill重启了数据库,之后数据库一直回滚中,导致后续执行其他操作都报错YAS-02016 no free undo blocks

问题单:大sql的undo回滚导致任何操作都无法执行,需要优化

问题的风险及影响

客户环境为准生产环境,影响业务执行。

问题影响的版本

YashanDB版本:22.2.11.100

问题发生原因

1、UNDO没有做调整,最大为64GB,insert单个表超过100GB,UNDO空间不足导致卡死。

2、由于kill导致重启对insert into select 做回退,rollback过程不能做truncate操作,UNDO空间需要rollback完成之后才能释放,由于索引导致rollback比较慢,UNDO一直不能释放,进而导致执行不了其他SQL。

解决方法及规避方式

1、删除索引,加快rollback

2、线上操作需要避免出现大事务,使用imp、yasldr等工具分批提交,或者在insert into select中添加where条件,分批提交。

3、执行数据迁移过程,规划好UNDO空间。

4、导入数据过程先去掉索引,待数据导入完之后重建索引。

问题分析和处理过程

核查相应参数:

  • 机器配置为16核64g

  • UNDO_RETENTION为300

  • STARTUP_ROLLBACK_PARALLELISM 为2

  • V$ROLLBACK为空

  • UNDO文件为64G

  • user_segments中目标表的segment大小约100G

  • 表一共493752518行,数据量大

  • CHECKPOINT_INTERVAL=100000、CHECKPOINT_TIMEOUT=300为默认值

尝试添加UNDO数据文件:不成功

返回报错,报错信息YAS-02042 cannot execute tablespace DDL when the database is rolling back。由于数据库被kill重启, 该报错是正常的。

分析是否需要调整回退线程数量:不需要

STARTUP_ROLLBACK_PARALLELISM可以在数据库启动的时候决定回退线程数量,并启动相应的回退线程。从CPU的情况看,消耗很低, 瓶颈不在rollback线程, 调整需要重启,决定不调整该参数。

尝试调整UNDO保留时间:效果不明显

已提交事务的UNDO会变为可回收,为了减少已提交事务占用较多空间,强制所有提交的事务立即写入数据文件,执行了如下操作:

alter system set UNDO_RETENTION = 3;

ALTER SYSTEM CHECKPOINT;

操作后,UNDO表空间使用没有明显减少

联系客户删除索引,待数据导入完成之后再重建索引,效果明显

查看IOSTAT,结果: 读20+M/s, 写400K/s。写入数据相对较慢, 检查表目标表DDL, 存在较多索引。

删除后IO读20+M/s, 写4M/s,写速度明显提升, 20分钟后客户反馈rollback完成。

分析执行其他操作报错原因

检查UNDO表空间大小,确认最大值是64G,这也解释了为什么一个事务rollback影响后续其他业务执行都报错YAS-02016 no free undo blocks, 是因为UNDO表空间满了,在rollback完成之前不会释放。

UNDO空间大小有默认安装参数,在没有修改的情况下最大值是64G, 虽然会自动扩展, 但是在到达最大值之后,不会再扩展。

和客户确认是没有做过修改, 核查V$datafile视图, 最大值确认是64G

https://doc.yashandb.com/yashandb/22.2/zh/工具手册/yasboot/建库参数.html

重新执行数据插入

客户在rollback之后添加多2个UNDO表空间文件, 扩大UNDO的空间扩展上限,同时修改插入语句,分批插入数据,避免大事务。

经验总结

1、数据写入、rollback过程,需要对索引做相应的修改,为了加快速度,可以先删除或把索引设置为UNUSABLE,待完成之后再建索引,或rebuild索引。

2、线上操作要避免出现大事务,使用imp、yasldr等工具分批提交,或者在insert into select 中添加where条件,分批提交。

3、执行数据迁移过程,规划好UNDO空间。UNDO空间大小默认最大值是64G,虽然会自动扩展,但是在到达最大值之后,不会再扩展,可以修改最大值限制,或添加数据文件。

标签:回滚,rollback,最大值,UNDO,索引,报错,undo,执行
From: https://www.cnblogs.com/YashanDB/p/18344676

相关文章

  • .netCore System.Drawing.Common 发布,在CentOS 运行报错
    centos下要运行 System.Drawing.Common,需要先安装mono的  libgdiplus插件才可以。安装后,还报以下错误的,才是下文的内容。 报错:System.PlatformNotSupportedException:System.Drawing.Commonisnotsupportedonnon-Windowsplatforms.Seehttps://aka.ms/systemdra......
  • 后端MyBatis连接Mysql数据库时常见报错
     目录报错情况报错情况一:​编辑报错情况二:解决步骤一、解决命名问题1.mapper层的id是否和Dao层的方法名字相同2.检查namespace与Dao层的文件地址相同二、解决注解问题1.检查Controller层的注解是否正确和完整2.Dao层或者Mapper层的注解3.pojo层:实体类层Data注解(用......
  • 【报错提示】java.lang.RuntimeException: Can't create handler inside thread
    ​报错提示遇到一个报错: java.lang.RuntimeException:Can'tcreatehandlerinsidethreadThread[OkHttphttps://a.fxltsbl.com/...]thathasnotcalledLooper.prepare() 分析 1.这个报错提示是在一个没有调用Looper.prepare()的线程中尝试创建一个Handler对象......
  • Maven项目报错:failed to execute goal org.apache.maven.plugins:maven-compiler-plug
    创建了一个maven项目,然后在编译时运行错误:“failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile(default-compile)onprojectforum:thepluginorg.apache.maven.plugins:maven-compiler-plugin:3.13.0requiresmavenversion3.6.3-......
  • Dzzoffice结合OnlyOffice 报错排查流程总结
    检测OnlyOffice服务是否安装成功首先访问OnlyOffice首页,如下图:出现上图仍旧不能说明你的OnlyOffice服务已经成功安装,我们需要启动OnlyOffice服务测试用例来检测,可以看到上图出现了两条命令,第一条命令是用来启动测试用例服务的,我们只需要在后台执行该命令即可,Win......
  • npm下载包时报错 Unexpected token ‘.‘问题解决
    项目场景:项目需要使用node18.12.0以上版本的,但是npm下载显示异常问题描述当通过nvm切换nodejs版本为16以上时,npminstall[package]报错:Unexpectedtoken'.'原因分析:提示:该问题不是npm的问题,也不是nodejs的问题,是nvm-windows的问题我是通过nvm-windows已经更新版本......
  • 解决windows报错:该文件没有与之关联的应用来执行该操作
    报错截图:解决方案1、新建txt文件2、复制内容到txt文件taskkill/f/imexplorer.exeregadd"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIcons"/v29/d"C:\Windows\system32\imageres.dll,154"/treg_sz/fregadd......
  • MybatisPlus自带方法报错BindingException: Invalid bound statement (not found)
    问题描述: MybatisPlus自带方法如xxx.list()xxx.save()或则xxMapper.selectList()... 等方法无法使用报错:Invalidboundstatement(notfound) 但是自己定义的sql方法可以使用问题排查: 1、自定义方法可使用排除xml位置不正确,包扫描没扫到(target目录下已生成对应的mapper和xml......
  • 【YashanDB数据库】自关联外键插入数据时报错:YAS-02033 foreign key constraint viola
    问题现象使用如下的sql语句创建自关联外键表:droptableself_f_key;createtableself_f_key(t1numberprimarykeynotnull,t2number);createindexi_s_1onself_f_key(t2);altertableself_f_keyaddconstraintc_0001foreignkey(t2)referencesself_f_key(t1);......
  • 【YashanDB数据库】ycm托管数据库时报错OM host ip:127.0.0.1 is not support join to
    问题现象托管数据库时检查报错OM的IP是127.0.0.1,不支持托管到YCMOM问题的风险及影响导致数据库无法托管监控问题影响的版本问题发生原因安装数据库时修改了OM的监听ip为127.0.0.1解决方法及规避方式后台修改OM的ip为本机的ip或者0.0.0.0问题分析和处理过程1、修改en......