记录一次TEMP表空间暴涨问题

  1. 问题描述
    应用人员在进行业务跑批时出现报错,报错提示:“回滚表空间不足”
    在这里插入图片描述

  2. 问题排查
    根据报错,首先排查了ROLL表空间的大小,发现回滚表空间是自动扩展的,而咨询过应用人员,跑批业务是每2000条进行批量提交,正常情况下不会将回滚表空间占满,于是 df -h 查看磁盘空间,发现磁盘空间已经用满,只剩几MB,进一步查看数据文件目录下的文件大小,发现TEMP.DBF使用300多G,对于达梦的临时表空间,SQL在执行完后系统会自动释放占用的临时段,但临时文件所占用的磁盘空间并不会减少,由于临时表空间没有设置最大上限,因此临时文件会越来越大,将磁盘空间占满,导致回滚表空间无法继续扩展。
    在这里插入图片描述

  3. 解决
    达梦提供了函数SP_TRUNC_TS_FILE可以回收TEMP表空间

    功能说明:
    将临时表空间文件截断到指定的大小,仅能截断文件空闲未使用的部分,如果在指定 to_size 后存在已使用数据页,则实际截断大小会大于 to_size

    参数说明:
    ts_id:指定截断文件的临时表空间 ID
    file_id:指定截断文件的文件 ID
    to_size:指定将文件截断至多大,以 M 为单位;to_size 大小换算成页数后,值必须在 4096 到 2G 之间

查看临时表空间和文件ID

SQL> select id,name from v$tablespace;

LINEID     ID          NAME  
---------- ----------- ------
1          0           SYSTEM
2          1           ROLL
3          3           TEMP
4          4           MAIN

used time: 0.601(ms). Execute id is 9006.

SQL> select file_id,tablespace_name from dba_data_files;

LINEID     FILE_ID     TABLESPACE_NAME
---------- ----------- ---------------
1          0           SYSTEM
2          0           MAIN
3          0           TEMP
4          0           ROLL

used time: 7.420(ms). Execute id is 9005.

可以确定临时表空间的 ts_id=3,file_id=0

将临时表空间文件号为 0 的文件截断到 1024M 大小

SQL> CALL SP_TRUNC_TS_FILE (3, 0, 1024);

修改参数 TEMP_SPACE_LIMIT 设置临时表空间最大上限100G

SQL> call sp_set_para_value(1,'TEMP_SPACE_LIMIT',102400);

通知应用人员再次进行跑批,结果运行正常。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值