暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DB2删数据空间不释放问题处理办法

原创 jiayou 2024-09-22
402

DB2删数据空间不释放问题处理办法

1、问题描述:

客户微信描述数据库删除表不释放空间

2、问题分析:

DB2数据库删除数据或drop表并不会释放磁盘空间,涉及到高水位问题

DB2 v11.1.3.3

1.查看是否为自动存储

db2pd -d dbname -tablespaces

2.筛选出表空间的高水位大于已使用表空间的表和大小

db2 -x "select tbsp_name,sum((TBSP_PAGE_TOP-TBSP_USED_PAGES)*(TBSP_PAGE_SIZE/1024)/1024/1024) as HW_GB from sysibmadm.TBSP_UTILIZATION as t where t.tbsp_page_top >t.tbsp_used_pages group by t.tbsp_name order by HW_GB desc "

3.对表空间进行降低高水位操作

db2 "alter tablespace xxx reduce MAX"

提示: 要最大化 ALTER TABLESPACE 语句回收的空间量,请首先对表空间中的表和索引执行 REORG 操作。

使用系统临时表空间 TEMPSPACE1 作为工作区来重组表,请输入

db2 reorg table tabschema.tabname use tempspace1

4.监视表空间USERSPACE1移动情况:

db2 "SELECT varchar(TBSP_NAME, 20) AS TBSP_NAME, NUM_EXTENTS_MOVED, NUM_EXTENTS_LEFT, TOTAL_MOVE_TIME from TABLE(MON_GET_EXTENT_MOVEMENT_STATUS('USERSPACE1',-2)) AS t"

5.查看表空间状态信息,确认是否已降低高水位。

db2 list tablespace show detail

此外针对自动存储和非自动存储表空间提供如下脚本方便使用

****查看是否为自动存储

db2pd -d dbname -tablespaces

db2 "alter tablespace xxx lower high water mark" &(非自动存储)

nohup db2 "alter tablespace xxx reduce (all $resu M)" &

nohup db2 "alter tablespace xxx reduce MAX" & (自动存储)

****自动存储算出可降高水位大小脚本

db2 connect to smaple

>red_hwm.sql

>hwm.txt

db2 -x "select tbsp_name,sum((TBSP_PAGE_TOP-TBSP_USED_PAGES)*(TBSP_PAGE_SIZE/1024)/1024/1024) as HW_GB from sysibmadm.TBSP_UTILIZATION as t where t.tbsp_page_top >t.tbsp_used_pages group by t.tbsp_name order by HW_GB desc " >hwm.txt

while read i_system

do

{

tbs=`echo $i_system|awk '{print $1}'`

size=`echo $i_system|awk '{print $2}'`

echo "alter tablespace $tbs reduce MAX;" >>red_hwm.sql

}

done <hwm.txt

db2 -tvf red_hwm.sql >red_hwm.out

db2 terminate

****非自动存储算出可降高水位大小脚本(需要除容器个数)

>hwm.txt

>lower.sql

>reduce.sql

db2 connect to sample

db2 -x "select varchar(tbsp_name,60) as tbsp_name, (TBSP_PAGE_TOP-TBSP_USED_PAGES)*(TBSP_PAGE_SIZE/1024/1024) from table(mon_get_tablespace('',-1)) as t where t.tbsp_page_top>t.tbsp_used_pages" >hwm.txt

while read i_system

do

{

tbs=`echo $i_system|awk '{print $1}'`

size=`echo $i_system|awk '{print $2}'`

resu=`echo "${size}/3"|bc`

echo "alter tablespaces $tbs lower high water mark;">>lower.sql

echot "alter tablespaces $tbs reduce(all $resu M);">>reduce.sql

}

done <hwm.txt

@查询表空间使用情况:

db2 "select char(TBSP_NAME,20) as TBSP_NAME, TBSP_USABLE_PAGES, TBSP_USED_PAGES, rtrim(100*TBSP_USED_PAGES/TBSP_USABLE_PAGES)||'%' as USED_RATE from sysibmadm.SNAPTBSP_PART where TBSP_USABLE_PAGES>0 order by TBSP_NAME,DBPARTITIONNUM"

@查询筛选出所有高水位标记大于已使用页的表空间:

db2 "SELECT char(TBSP_NAME,20) as TBSP_NAME, RECLAIMABLE_SPACE_ENABLED,TBSP_USED_PAGES, TBSP_FREE_PAGES, TBSP_PAGE_TOP from TABLE (MON_GET_TABLESPACE('',-2)) AS t where t.TBSP_PAGE_TOP > t.TBSP_USED_PAGES"

RECLAIMABLE_SPACE_ENABLED 是表空间的 可回收存储器 属性;如果值是1,表示空间可回收。

@监视表空间USERSPACE1移动情况:

db2 "SELECT varchar(TBSP_NAME, 20) AS TBSP_NAME, NUM_EXTENTS_MOVED, NUM_EXTENTS_LEFT, TOTAL_MOVE_TIME from TABLE(MON_GET_EXTENT_MOVEMENT_STATUS('USERSPACE1',-2)) AS t"

表空间USERSPACE1 降低高水位标记,释放空闲空间;当前显示已经移动了 1113 个数据块,还剩下2931028个数据块,共花费 64634ms 的时间。如果在非移动状态下,所有值为 -1。

更多知识查询官方说明:

https://www.ibm.com/docs/zh/db2/11.1?topic=management-reclaimable-storage

使用系统临时表空间 TEMPSPACE1 作为工作区来重组表,请输入

db2 reorg table tabschema.tabname use tempspace1

最后修改时间:2024-09-22 07:32:37
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论