如何检查表是否使用了DB2中的多少空间

时间:2011-11-14 07:39:11

标签: db2

DB2中是否有一种方法可以识别表正占用分配给基础表空间的总空间量。"

由于

3 个答案:

答案 0 :(得分:4)

您的问题会产生错误的二分法,因为可能会创建一个表空间而不会为其分配有限的空间。限制可能是表空间所在的驱动器或共享。但是,如果您知道分配给表空间的空间或只需要表正在使用的表空间当前大小的百分比,那么是的,有一种方法可以知道。

SELECT * FROM SYScat.tables where tabname='mytable';

将告诉您表格使用了多少页面。

然后在命令行:LiST TABLESPACES SHOW DETAIL 将告诉您表空间中的总页数和页面大小(以字节为单位)。

Select * from sysibmadm.tbsp_utilization where tbsp_name='MyTblSpace' 

将为您提供表空间的最大大小(如果有)。

答案 1 :(得分:3)

DB2查询以检查表大小

select 
   a.CARD*(sum(b.AVGCOLLEN)+10)/1024/1024 as Tablesize_in_MB 
from 
   syscat.tables as a, syscat.columns as b 
where 
   a.TABNAME = b.TABNAME and b.TABNAME = 'TABLE_NAME' group by a.CARD

数据大小

select 
  char(date(t.stats_time))||' '||char(time(t.stats_time)) as statstime 
  ,substr(t.tabschema,1,8)||'.'||substr(t.tabname,1,24) as tabname 
  ,card as rows_per_table 
  ,decimal(float(t.npages)/ ( 1024 / (b.pagesize/1024)),9,2) as used_mb 
  ,decimal(float(t.fpages)/ ( 1024 / (b.pagesize/1024)),9,2) as allocated_mb 
from 
  syscat.tables t , syscat.tablespaces b 
where t.tbspace=b.tbspace 
order by 5 desc with ur

索引大小

select 
  rtrim(substr(i.tabschema,1,8))||'.'||rtrim(substr( i.tabname, 1,24)) as tabname 
 ,decimal(sum(i.nleaf)/( 1024 / (b.pagesize/1024)),12,2) as indx_used_per_table_mb 
from 
   syscat.indexes i, syscat.tables t , syscat.tablespaces b 
where 
   i.tabschema is not null and i.tabname=t.tabname 
   and i.tabschema=t.tabschema and t.tbspace=b.tbspace 
group by 
   i.tabname,i.tabschema, b.pagesize order by 2 desc with ur

答案 2 :(得分:1)

您可以从 SYSIBMADM.ADMINTABINFO 表中获取基础表物理尺寸

命令如下。

  

db2“SELECT SUBSTR( TABSCHEMA ,1,15)作为SCHEMA,SUBSTR( TABNAME ,1,20)as   TABLENAME, DATA_OBJECT_P_SIZE INDEX_OBJECT_P_SIZE ,    LONG_OBJECT_P_SIZE LOB_OBJECT_P_SIZE XML_OBJECT_P_SIZE ,   (DATA_OBJECT_P_SIZE + INDEX_OBJECT_P_SIZE + LONG_OBJECT_P_SIZE +   LOB_OBJECT_P_SIZE + XML_OBJECT_P_SIZE)来自 TOTAL_P_SIZE   SYSIBMADM.ADMINTABINFO,其中TABNAME = 'table_name'

总物理大小是所有DATA,INDEX,LONG,LOB和XML OBJECT物理大小的总和(_P_SIZE表示物理大小)。

您无法从SYSIBMADM.ADMINTABINFO获取表空间名称(即使您可以获取表空间ID),因为您需要使用 SYSCAT.TABLES 加入上述查询。