【问题标题】:how to check table is using how much space in DB2如何检查表在 DB2 中使用了多少空间
【发布时间】:2015-05-14 18:09:18
【问题描述】:

在 DB2 中是否有一种方法可以确定一个表正在消耗分配给基础表空间的总空间的多少。”

谢谢

【问题讨论】:

  • 什么版本的 DB2?它在什么平台上运行?

标签: db2


【解决方案1】:

用于检查表大小的 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】:

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

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

    会告诉你一个表正在使用多少页。

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

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

    如果有表空间,会给你最大的表空间大小。

    【讨论】:

    • 此答案仅适用于在 Linux、UNIX 或 Windows 上运行的 DB2。此外,syscat.tables 中的 NPAGES 和 FPAGES 仅在执行 RUNSTATS 时更新;这些值可能不准确。此外,它们不包括分配给索引、LOB 等的空间。最好查看 SYSIBMADM.ADMINTABINFO。
    【解决方案3】:

    您可以从 SYSIBMADM.ADMINTABINFO 表中获取基础表physical size

    命令如下。

    db2 "SELECT SUBSTR(TABSCHEMA,1,15) 作为 SCHEMA,SUBSTR(TABNAME,1,20) 作为 表名,DATA_OBJECT_P_SIZEINDEX_OBJECT_P_SIZELONG_OBJECT_P_SIZELOB_OBJECT_P_SIZEXML_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 where TABNAME='table_name'"

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

    您无法从 SYSIBMADM.ADMINTABINFO 获取表空间名称(即使您可以获取表空间 id),因为您需要将上述查询与 SYSCAT.TABLES 结合起来。

    【讨论】:

      猜你喜欢
      • 2014-06-29
      • 2016-10-04
      • 1970-01-01
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      • 2010-09-23
      • 1970-01-01
      相关资源
      最近更新 更多