【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,如下图所示:

img1

磁盘空间不够的表现

tablespace不做限制,磁盘空间满了之后,插入数据的表现

create tablespace mydata datafile '?/dbfiles/mydata' size 20G autoextend on next 128M maxsize unlimited databucket '?/local_fs/mydata';

如下,数据库变成abnormal状态,插入报错返回。

img3

解决方式,删掉一些日志或者不用的文档,释放空间,则能恢复。

posted @   YashanDB  阅读(19)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示