仙道彰
作者仙道彰·2017-09-19 17:25
数据库开发工程师·花旗集团

如何查看数据库的大小

字数 2103阅读 2394评论 3赞 5

通常我们在做数据库备份(表空间备份)之前都要先知道数据库(表空间)的大小,然后来给备份文件分配空间同时也可以大致估计下备份需要的时间;

下面介绍几种查看数据大小或者表空间大小(表空间备份)的方法:

1.查看表空间的使用情况及其使用率

db2 " select substr(tbsp_name,1,20) as TABLESPACE_NAME,substr(tbsp_content_type,1,10) as TABLESPACE_TYPE,sum(tbsp_total_size_kb)/1024 as TOTAL_MB,sum(tbsp_used_size_kb)/1024 as USED_MB,sum(tbsp_free_size_kb)/1024 as FREE_MB,tbsp_page_size AS PAGE_SIZE from SYSIBMADM.TBSP_UTILIZATION group by tbsp_name,tbsp_content_type,tbsp_page_size order by 1 "

2. 统计所有节点表空间使用率

db2 " select substr(TABLESPACE_NAME,1,20) as TBSPC_NAME,bigint(TOTAL_PAGES PAGE_SIZE)/1024/1024 as TOTAL_MB,used_pagesPAGE_SIZE/1024/1024 as USED_MB, free_pages*PAGE_SIZE/1024/1024 as FREE_MB from table(snapshot_tbs_cfg('db_name', -2)) as snapshot_tbs_cfg "

将db_name 替换成要查的数据库名称;

3.查询数据库大小的操作

db2 "select (sum(total_pages) 4096)/(10241024) Tot_allocat_spceinMB from table(snapshot_tbs_cfg(' ',-1)) TBS_SPCE"

这里的4096是默认的4K 的pagesize的值,可以根据实际情况修改;

4.根据表空间使用情况估算数据库大小

首先连接到数据库:

db2 connect to  db_name 

db.jpg

db.jpg

查看表空间detail :

db2 list tablespaces show detail 

C.jpg

C.jpg

如图可以看到该数据库下有多个表空间,我们选取数量级最大的表空间参与计算(如果存在多个数量级相同且为最大数量级的表空间时需要先将他们累加起来)如红丝边框所示;我们将蓝色框内的几个忽略不计(因为相对于大的表空间而言这几个表空间只是零头);

计算公式:

    (Total pages * Page size) / (1024*1024) GB
    

带入计算 :

(174030848*4096)/(1024*1024)GB ~ 679.808 GB

和方案3的结果比较下:

1.jpg

1.jpg

可以发现估算出来的结果和方案三得出的结果差距不大;这种方法比较简单也不许要记住复杂的代码;

5.调用存储过程GET_DBSIZE_INFO实现

db2 "CALL GET_DBSIZE_INFO(?, ?, ?, 0)"

上述命令中,三个问号是输出变量,分别代表时间戳,数据库实际包含了多少字节的数据,数据库在物理磁盘中的大小。

此方法为y5_set补充,在此表示感谢。

6.查看表空间RECLAIMABLE_SPACE_ENABLED 的值(适用于降高水位线)

db2 "select substr(TBSP_NAME,1,25),reclaimable_space_enabled from table (MON_GET_TABLESPACE(NULL,-1)) WHERE TBSP_NAME NOT  LIKE ('SYS%')"

注:RECLAIMABLE_SPACE_ENABLED 栏位是表空间的“可回收存储器”属性。如果是 1,则表示可回收 ,0 表示不可回收。没有“可回收存储器”属性的表空间不能使用子句来减小或者降低高水位标记。

查看RECLAIMABLE_SPACE_ENABLED 的值为1的表空间,则可以用新特性降低高水位

db2 "SELECT varchar(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"

注:这里的新特性指的是V9.7版本及其之后的版本所具有的特性,V9.7之前的版本降低高水位线的方法很复杂;
先介绍这5种方案,后续发现有趣的方法再来补充;

声明:版权所有非经授权请勿做任何商业用途,仅限技术交流!

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

5

添加新评论3 条评论

y5_sety5_set其它不告诉你
2017-09-22 09:01
学习了,我都是常用db2 "call get_dbsize_info(?,?,?,-1)";

仙道彰@y5_set 已经补充到文章中,在此表示感谢。

2017-09-22 09:14

仙道彰@y5_set 谢谢补充

2017-09-22 09:10
aixkevinaixkevin存储工程师某公司
2017-09-21 11:20
学习下
wuwenpinwuwenpin软件开发工程师南京
2017-09-20 14:54
点赞
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广