【YashanDB 知识库】表数据量不多,lob 数据段有大量空间,插入数据报错
问题现象
clob 段异常增长,导致磁盘空间满,应用无法使用数据库。
问题风险及影响
lob 段空间未复用,lob 段空间扩张很大,影响磁盘占用合理分配。
空间不够,插入报错,影响业务。
问题影响的版本
所有版本
问题发生原因
lob 类型删除后,空间不会立即复用,需要等待 UNDO_RETENTION 时间后,空间才会复用。
普通的数据类型表空间段,普通数据被删后插入到 undo 空间,删除后就可以复用。
lob 数据因为太大,被删除后,lob 自己就是一份 undo 数据,不插入到 undo 空间,所以需要保留 undo_retention 时间后,才能复用。
解决方式及规避方法
1、把 tablespace 的 maxsize 小于磁盘空间,按具体业务表大小配置,
2、undo_retention,如果业务插入数据频繁,且插入数据量多,建议配置小一些,按具体业务插入数据量。
3、如果插入数据量多,磁盘空间建议配置大些
问题分析和处理过程
表空间不够的表现
创建一个 maxsize 为 3G 的表空间,mydata,在该表空间创建表 tmp1,该表有 3 个 clob 字段,如上。
做如下操作:
1、往 tmp1 表插入数据
2、delete table tmp1;
3、查看 dba_segments 视图 mydata 中的表空间段。
循环做上面 3 个操作,最后报错 YAS-02007 no free extent in tablespace MYDATA,如下图所示:
磁盘空间不够的表现
tablespace 不做限制,磁盘空间满了之后,插入数据的表现
create tablespace mydata datafile '?/dbfiles/mydata' size 20G autoextend on next 128M maxsize unlimited databucket '?/local_fs/mydata';
如下,数据库变成 abnormal 状态,插入报错返回。
解决方式,删掉一些日志或者不用的文档,释放空间,则能恢复。
评论