IT其它数据库

【分享一下】 由备份引起的临时表空间不足

今天客户反应,数据库分片表特别慢,后来查看日志发现总是再报tmpdbs03 is full的错误,部分临时表索引无法创建,影响到数据。使用命令  onstat -g pqs |sort -nk5  (这个命令我也不太了解,有了解的大神帮忙详细介绍一下啊)查看排在最下面的会话,也没有大的数据...显示全部
今天客户反应,数据库分片表特别慢,后来查看日志发现总是再报tmpdbs03 is full的错误,部分临时表索引无法创建,影响到数据。

使用命令  onstat -g pqs |sort -nk5  (这个命令我也不太了解,有了解的大神帮忙详细介绍一下啊)查看排在最下面的会话,也没有大的数据扫描,理论上应该不会占完8个G的临时表空间。

dbaccess sysmaster -
Select trim(n.dbsname) tab_type, trim(n.owner) users, trim(n.tabname) tab_name,
dbinfo('UTC_TO_DATETIME',i.ti_created) index_createtime, trim(dbinfo('DBSPACE', i.ti_partnum)) dbspace, format_units(i.ti_nptotal,i.ti_pagesize) total_size, i.ti_nrows
FROM sysmaster:systabnames n, sysmaster:systabinfo i
WHERE (sysmaster:bitval(i.ti_flags, 32) = 1 OR sysmaster:bitval(i.ti_flags, 64) = 1
OR sysmaster:bitval(i.ti_flags, 128) = 1) AND i.ti_partnum = n.partnum
order by 1,3


执行查看个临时表空间的使用情况。

分析发现

tab_type   BEFIMAGE
users        informix
tab_name th_rpmdbs01_1   (这个是什么意思,我也不太清楚,希望知道的朋友指点一下啊)
index_createtime   2013-04-10  10:28:48
dvsoace    tmpdbs03
total_size   6.58G
ti_nrows     0


后查找“BEFIMAGE”  看到论坛liao神讲过
在备份的时候,数据库会在tempdbs中生成BEFIMAGE这样的空间,用于保存自备份开始以来的事务操作前映像,目的是为了保证备份时间点的一致性

停掉备份程序后,临时表空间得以释放,业务恢复正常。
本着知识共享的原则,无私奉献一下今日的收获。正好压点下班~收起
参与8

查看其它 7 个回答光洋山的回答

光洋山光洋山数据库架构师金融科技公司
因为在备份的过程中,如果有新的数据页(脏页)产生,为了保证备份时间点问题,需要将新的数据页的before image--前影数据页,存储在临时表空间中,在备份过程的最后阶段需要将临时表空间的这些数据页替换已备份的数据页。
那么为了防止热备份过程出现类似问题,
1、一般都需要为数据库配置尽量大的、数量>4个的临时表空间;
2、尽量不要在备份过程中,进行较大的数据的批量处理(DML);
3、尽量将备份任务安排在系统较为空闲的时间段进行;
软件开发 · 2013-10-24
浏览1484

回答者

光洋山
数据库架构师金融科技公司

光洋山 最近回答过的问题

回答状态

  • 发布时间:2013-10-24
  • 关注会员:0 人
  • 回答浏览:1484
  • X社区推广