数据库问题 - 如何解决低级别的TABLESPACE免费页面?

时间:2012-06-06 15:54:15

标签: database db2

我们正在为使用DB2数据库的客户实现一些系统,之前我们没有表空间免费页面的问题!但是现在在实现阶段我可以看到低级别的数据库空闲页面。我们有56304页,现在我们只有288页免费。有人可以告诉我它是否有害且危险?怎么解决?我试着制作一些表的属性以减小它们的大小(例如ALN从250我设置为100)但是不是增长我的表空间变得更小?怎么解决这个?我会非常感激

2 个答案:

答案 0 :(得分:2)

在Linux,UNIX和Windows平台上,DB2会自动增加其表空间,除非明确定义它们。以下查询将显示哪些表空间需要通过ALTER TABLESPACE命令手动调整大小:

SELECT VARCHAR( RTRIM( tbsp_name ) || ' does not have AUTORESIZE enabled', 60 ) FROM sysibmadm.snaptbsp WHERE tbsp_type = 'DMS' AND tbsp_auto_resize_enabled <> 1 ;

如果上述查询未返回任何行,则数据库中的所有表空间将根据需要自动增长,直到数据库用于存储的驱动器,卷或文件系统上没有剩余空间。

当您更改表以减少其中一列的最大大小时,该更改不会影响表中的现有行,直到它们被UPDATE语句或REORG TABLE命令修改为止。

答案 1 :(得分:1)

是的,如果你的可用页面用完了,那么DB2将无法再向表中写入数据。

有几种方法可以增加免费页面的数量。您需要知道为表空间分配了多少文件容器,以及使用以下查询(或命令行中的db2 list tablespaces show detail)有多少空闲和已用页面:

SELECT SUBSTR(TBSP_NAME,1,15) NAME
      ,TBSP_TYPE TYPE
      ,TBSP_AUTO_RESIZE_ENABLED AUTO_RESIZE
      ,TBSP_NUM_CONTAINERS CONTAINERS
      ,TBSP_TOTAL_PAGES TOTAL_PGS
      ,TBSP_USED_PAGES USED_PGS
      ,TBSP_FREE_PAGES FREE_PGS
      ,TBSP_MAX_SIZE MAX_SZ
      ,TBSP_PAGE_SIZE PG_SZ
FROM SYSIBMADM.TBSP_UTILIZATION
WHERE TBSP_CONTENT_TYPE IN ('ANY','SYSTEMP')

然后,您可以使用以下公式计算要增加的页数:

numPages = (usedPages - freePages) / numberOfContainersInTS

然后,您将获取结果并使用ALTER TABLESPACE扩展表空间:

ALTER TABLESPACE <yourTS> EXTEND (ALL <numPages>)

此外,您可以REORG表格,这可能会释放一些未使用的页面。