DB2 查看表空间使用情况,占用磁盘空间大小:
SELECT A.SNAPSHOT_TIMESTAMP,
A.TBSP_NAME,
B.TBSP_TYPE,
A.TBSP_STATE,
A.TBSP_USABLE_PAGES * B.TBSP_PAGE_SIZE / 1024 / 1024 / 1024 AS TOTAL,
A.TBSP_USED_PAGES * B.TBSP_PAGE_SIZE / 1024 / 1024 / 1024 AS USED,
(A.TBSP_USABLE_PAGES - TBSP_USED_PAGES) * B.TBSP_PAGE_SIZE / 1024 / 1024 / 1024 AS FREE
FROM SYSIBMADM.SNAPTBSP_PART A
INNER JOIN SYSIBMADM.SNAPTBSP B ON A.TBSP_ID = B.TBSP_ID;
DB2 V9.7 版本 释放表空间、降低表空间高水位 释放磁盘空间:
- delete 数据并不会释放表空间,需要重组表;delete大量数据 或者 表启用压缩
create table tableName compress yes 或 alter table tableName compress yes
后; reorg表才会释放表空间。
先执行 runstats 再执行 reorg 。
#!/bin/bash
#指定日志路径
LOGFILE=/home/db2inst1/start.log
echo `date +'%Y-%m-%d %H:%M:%S'`" 连接到数据库:" >> ${LOGFILE} 2>&1
db2 connect to DB_NAME >> ${LOGFILE} 2>&1
echo `date +'%Y-%m-%d %H:%M:%S'`" 收集统计信息:" >> ${LOGFILE} 2>&1
db2 runstats on table XX.TB_NAME >> ${LOGFILE} 2>&1
echo `date +'%Y-%m-%d %H:%M:%S'`" 收集统计信息完成 !! " >> ${LOGFILE} 2>&1
echo `date +'%Y-%m-%d %H:%M:%S'`" 开始重组表 :" >> ${LOGFILE} 2>&1
db2 reorg table XX.TB_NAME >> ${LOGFILE} 2>&1
echo `date +'%Y-%m-%d %H:%M:%S'`" 重组表结束!! " >> ${LOGFILE} 2>&1
- 降低表空间高水位:
首先查看可以降低高水位的表空间:
SELECT varchar(tbsp_name, 16) as tbsp_name,
RECLAIMABLE_SPACE_ENABLED,
TBSP_USED_PAGES,
TBSP_FREE_PAGES,
TBSP_PAGE_TOP
from TABLE (MON_GET_TABLESPACE('',-1)) AS t where t.TBSP_PAGE_TOP > t.TBSP_USED_PAGES
降低表空间高水位操作:db2 ALTER TABLESPACE tbsp_nameLOWER HIGH WATER MARK