DB2表空间占用很大磁盘空间,而实际并没有那么大,DB2删除数据或drop表并不会是否磁盘空间,所以要释放磁盘空间降低表空间高水位。
连接到数据库
BI-DEV:~ # su - db2inst4
db2inst4@BI-DEV:~> db2 connect to aismart2

查看DB2数据库表空间信息
db2inst4@BI-DEV:~> db2 list tablespaces show detail
确认表空间是系统管理(SMS),还是数据库管理(DMS).

Tablespace ID = 12
Name = TS_ODS_DATA --表空间名称
Type = Database managed space --类型为DMS 数据库自己管理
Contents = All permanent data. Large table space.
State = 0x0000 --状态为正常
Detailed explanation:
Normal
Total pages = 15009280 --总大小
Useable pages = 15009120 --可用大小
Used pages = 750272 --已用大小
Free pages = 14258848 --剩余大小(14258848*16384)
High water mark (pages) = 750272 --高水位 ,从今达到的最高值,压缩的
时候可以参考(不能低于这个值)
Page size (bytes) = 16384
Extent size (pages) = 32
Prefetch size (pages) = 1000
Number of containers = 5
查看数据库的表空间信息
db2inst4@BI-DEV:~> db2pd -tablespaces -db aismart2

查看DMS表空间是否启用了自动存储
db2inst4@BI-DEV:~> db2 get snapshot for tablespaces on aismart2

DB2降低表空间高水位HWM
1、查询表空间使用情况
db2inst4@BI-DEV:~> 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"

2、查询筛选出所有高水位标记大于已使用页的表空间
db2inst4@BI-DEV:~> 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,表示空间可回收。

3、表空间降低高水位
- DMS自动存储表空间(DMS with AutoStorage) 直接运行 REDUSE MAX 来最多
的释放空闲空间 :db2 ALTER TABLESPACE USERSPACE1 REDUCE MAX
这个语句执行后就提示成功了,但是表空间水位并没有立刻降低,有个表空间
数据块移动的过程
- 据说DMS非自动存储表空间(需要先运行 LOWER HIGH WATER MARK 子句降
低高水位标记,再运行 REDUCE 子句释放表空间):先执行ALTER
TABLESPACE USERSPACE1 LOWER HIGH WATER MARK 然后ALTER
TABLESPACE USERSPACE1 REDUCE (ALL CONTAINERS 100 M)
db2inst4@BI-DEV:~> db2 "ALTER TABLESPACE TS_ODS_DATA LOWER HIGH WATER MARK"

db2 "ALTER TABLESPACE TS_ODS_DATA REDUCE (ALL CONTAINERS 100
M)"

4、监视表空间TS_PD_DATA移动情况,如果在非移动状态下,所有值为 -1。
db2inst4@BI-DEV:~> 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('TS_PD_DATA',-2)) AS t"

查看表空间状态
db2inst4@BI-DEV:~> db2 get snapshot for tablespaces on aismart2 | grep -i state

如果看到0x'00080000',则处于Move状态





