今天前端应用人员反映报错,SQL0289N错误,报告未能在“TEMPSYS_TBSP1”分配新的页面。SQLSTATE=57011。然后我看数据库系统临时表空间的详情,发现如下:
Tablespace ID = 3
Name = TEMPSYS_TBSP1
Type = Database managed space
Contents = System Temporary data
State = 0x0000
Detailed explanation:
Normal
Total pages = 2785280
Useable pages = 2785248
Used pages = 2785248
Free pages = 0
High water mark (pages) = 2785248
Page size (bytes) = 32768
Extent size (pages) = 32
Prefetch size (pages) = 64
Number of containers = 1
TBSP_ID TABLESPACE_NAME TABLESPACE_TYPE TOTAL_GB USED_GB FREE_GB PAGE_SIZE ------- -------------------- --------------- ---------- ---------- ---------- -----------
3 TEMPSYS_TBSP1 SYSTEMP 1360 85 1274 32768
请问,这种情况下怎么解决?为什么空间没有自动的回收呢?
空间没有自动回收说明有大的数据库进程(如SQL)在持续执行,或者空间不够造成进程pending了,可以通过db2top监控找出消耗资源最大的sql,force掉,如果回滚或者其他原因不能force的,最直接的办法就是再建一个更大的临时表空间(用完后可以删除或者保留)。对于多个临时表空间的情况,DB2使用的时候首先会选bufferpool大的,如果bufferpool相同,则选pagesize大的,如果pagesize再相同,则随机选择一个。
收起TABLESPACE_NAME TABLESPACE_TYPE DBPARTITIONNUM TOTAL_MB USED_MB FREE_MB PAGE_SIZE
-------------------- --------------- -------------- -------------------- -------------------- -------------------- -----------
TEMPSYS_TBSP1 SYSTEMP 0 87040 87039 0 32768
TEMPSYS_TBSP1 SYSTEMP 1 87040 10 87029 32768
TEMPSYS_TBSP1 SYSTEMP 2 87040 10 87029 32768
TEMPSYS_TBSP1 SYSTEMP 3 87040 10 87029 32768
TEMPSYS_TBSP1 SYSTEMP 4 87040 11 87028 32768
TEMPSYS_TBSP1 SYSTEMP 5 87040 10 87029 32768
TEMPSYS_TBSP1 SYSTEMP 6 87040 6 87033 32768
TEMPSYS_TBSP1 SYSTEMP 7 87040 6 87033 32768
TEMPSYS_TBSP1 SYSTEMP 8 87040 10 87029 32768
TEMPSYS_TBSP1 SYSTEMP 9 87040 6 87033 32768
TEMPSYS_TBSP1 SYSTEMP 10 87040 6 87033 32768
TEMPSYS_TBSP1 SYSTEMP 11 87040 11 87028 32768
TEMPSYS_TBSP1 SYSTEMP 12 87040 6 87033 32768
TEMPSYS_TBSP1 SYSTEMP 13 87040 6 87033 32768
TEMPSYS_TBSP1 SYSTEMP 14 87040 10 87029 32768
TEMPSYS_TBSP1 SYSTEMP 15 87040 10 87029 32768
收起1、报错信息:
SQL0289N Unable to allocate new pages in table space \"TEMPSYS_TBSP1\".
SQLSTATE=57011
2、系统本来就有两个系统临时表空间,但是他非要去用这个而且报错
TBSP_ID TABLESPACE_NAME TABLESPACE_TYPE TOTAL_GB USED_GB FREE_GB PAGE_SIZE
------- -------------------- --------------- ---------- ---------- ---------- -----------
3 TEMPSYS_TBSP1 SYSTEMP 1360 85 1274 32768
4 TEMPSYS_TBSP2 SYSTEMP 1360 0 1359 32768
3、当前系统没有回滚的操作
收起系统临时表空间,是系统内部自己用的,像你这种情况,怀疑是有SQL语句在运行排序之类的操作,但是正常情况下用完后马上会释放掉,像你这种情况感觉比较奇怪,我怀疑可能有操作正在回滚,所以一直没有释放系统临时表空间。
系统临时表空间我们是没有办法操作的,只能等待数据库完成操作后自己释放。如果长时间不是放,有一个办法,就是你再创建一个系统临时表空间,临时先用着,等这个释放了,再把新建的删掉。
你也可以看一下,当前系统有没有rollback状态的连接。可以用db2 list applications show detail命令看。