vlambda博客
学习文章列表

DB2 10.5 linux 数据库查询命令 及 表空间降低高水位(释放磁盘空间)

原文链接:

https://blog.csdn.net/Freedom_Long/article/details/78085682

参考链接:

https://blog.csdn.net/hyfstyle/article/details/105438368


DB2 10.5 linux 数据库查询命令 及 表空间降低高水位(释放磁盘空间)


1.DB2查询基础命令

连接: db2 connect to [dbname] user [username] using [password]

列出当前实例中所有激活的数据库: db2 list active databases

显示当前连接应用:db2 list application

显示当前用户下的表:db2 list tables for

指定其它特定用户: db2 list tablse for schema [username]

显示表空间信息:

<1>.db2 list tablespaces [show detail]

<2>.db2pd -tablespaces -db 数据库名

<3>.db2 get snapshot for tablespaces on [dbname].

结果中Using automatic storage: 表示DMS类型表空间是否为自动存储属性


注:上述自动存储与自动增长(Auto Risize)是两个概念.

设置自动增长:db2 alter tablespace USERSPACE1 autoresize yes increasesize 10240K maxsize none;


查询:db2 “select * from table”

数据TOPN排序:fetch first 10 rows only order by [column] [asc/desc]

更多详细操作

2.DB2检查表空间使用率

连接DB: db2 connect to [dbname] user [username] using [password]

查询:


db2 "select char(TBSP_NAME,50) 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"


3.DB2查看表所占磁盘空间

查看数据库页大小: (单位字节)

db2 get db cfg|grep page

查询数据表占用页的数量:


db2 "select tabname, npages from syscat.tables where tabname = 'Table_Name' "


Table_Name替换为实际表名.(下同)


计算表占用磁盘空间大小:

表占用磁盘空间大小 = 数据页大小 * 页数量


db2 "select tabname, npages*4096/(1024*1024) as mem from syscat.tables where tabname = 'Table_Name' "


4.DB2降低表空间高水位

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


db2 "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('',-2)) AS t  

where t.TBSP_PAGE_TOP > t.TBSP_USED_PAGES"



查看 RECLAIMABLE_SPACE_ENABLED 这一栏,这是表空间的“可回收存储器”属性。如果是 1,则表示空间可回收。


ALTER TABLESPACE(降低表空间USERSPACE1高水位):

<1>.DMS自动存储表空间(DMS with AutoStorage):(采用了自动存储的表空间,直接运行 REDUSE MAX 来最多的释放空闲空间)

db2 ALTER TABLESPACE USERSPACE1 REDUCE MAX

<2>.DMS非自动存储表空间:(需要先运行 LOWER HIGH WATER MARK 子句降低高水位标记,再运行 REDUCE 子句释放表空间。)

ALTER TABLESPACE [TBS NAME] LOWER HIGH WATER MARK

ALTER TABLESPACE [TBS NAME] REDUCE (ALL CONTAINERS 10 M)

注:查询DMS类型表空间是否为自动存储:

db2 get snapshot for tablespaces on [dbname] . Using automatic storage: yes/no 表示DMS类型表空间是否为自动存储属性


监视表空间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 100 1744 1664 该输出信息是在表空间 TBS1 降低高水位标记,释放空闲空间的过程中获取的。

当前显示已经移动了 100 个数据块,还剩下 1744 个数据块,共花费 1664ms 的时间。如果在非移动状态下,所有值为 -1.


验证表空间USERSPACE1高水位标记的降低:(同样是通过表函数 MON_GET_TABLESPACE 来验证最后的结果)


db2 "SELECT varchar(tbsp_name, 16) as tbsp_name, TBSP_USED_PAGES, TBSP_FREE_PAGES,TBSP_PAGE_TOP from TABLE (MON_GET_TABLESPACE('USERSPACE1',-2)) AS t" 


db2降低高水位参考链接


2. DB2降低表空间高水位HWM


一、查询表空间使用情况: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"

DB2 10.5 linux 数据库查询命令 及 表空间降低高水位(释放磁盘空间)

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


三、表空间降低高水位操作


DMS自动存储表空间(DMS with AutoStorage) 直接运行 REDUSE MAX 来最多的释放空闲空间 :db2 ALTER TABLESPACE USERSPACE1 REDUCE MAX 这个语句执行后就提示成功了,但是表空间水位并没有立刻降低,有个表空间数据块移动的过程(几个小时或以上)

DB2 10.5 linux 数据库查询命令 及 表空间降低高水位(释放磁盘空间)

据说DMS非自动存储表空间(需要先运行 LOWER HIGH WATER MARK 子句降低高水位标记,再运行 REDUCE 子句释放表空间):先执行ALTER TABLESPACE USERSPACE1 LOWER HIGH WATER MARK 然后ALTER TABLESPACE USERSPACE1 REDUCE (ALL CONTAINERS 100 M)

四、监视表空间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"

DB2 10.5 linux 数据库查询命令 及 表空间降低高水位(释放磁盘空间)

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

查看文件系统磁盘空间使用情况df -hl ,可以发现磁盘空间使用率降低了



原文链接:

https://blog.csdn.net/hyfstyle/article/details/105438368


如何降低DB2的管理表空间的高水位标记

Posted on 2009-10-08 22:22 Prayer 阅读(947) 评论(0)  编辑 收藏 引用 所属分类: 数据库,SQL 、DB2 

对于DB2数据库管理(DMS)表空间的高水位标记(HWM)是指该表空间曾经使用到的最大数据页数。如果使用:db2 list tablespaces show detail,看到某个DMS表空间的已用页数低于高水位标记,则有可能通过如下方法降低高水位标记:重组表空间的某个表;或者将某个表中的数据导出,然后将它删除,重新创建该表再将数据导入。


oracle中的解释
在oracle中,高水位标记是指段至启动以来增长到的最大大小,在表中,高水位标记指该表所使用的最后一个块,向表中插入数据时,高水位标记会移动来标记最后使用的块,当删除数据时,高水位标记不会重新设置,当oracle服务器执行全表扫描时,它会读取高水位标记以下所有的块。高水位标记存储在表的段头部。

    从上面这段定义,我们可以想象,新建两张表,向其中一张表插入一条数据,另一张插入1000万条,再删除999万条,查询这两张表,所耗费的资源显然是不同的,查询前一张表更快一些,因为它读的数据块更少。

    使用alter table table_name deallocate unused 或者 alter table table_name move tablespace tablespace_name可以清除高水位标记。

原文链接:

http://www.cppblog.com/prayer/archive/2009/10/08/98110.html