查看: 3587|回复: 5

如何估算一张表的CARDINALITY 和它的使用率

[复制链接]
论坛徽章:
2
祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
跳转到指定楼层
1#
发表于 2008-5-8 21:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天写了一个SQL,根据记录的平均长度来估算数据库中某张表的CARDINALITY 和它的使用率.

SQL
====
select a.tabschema , a.tabname ,a.card ,
case b.pagesize
when 4096
Then
    card*count_avg*100/64000000000
when 8192
Then
    card*count_avg*100/128000000000
when 16384
Then
   card*count_avg*100/256000000000
when 32768
Then
   card*count_avg*100/512000000000
  else null
  end as used
  from syscat.tables a , syscat.tablespaces b , (
    select tabname,tabschema, SYSIBM . sum ( AVGCOLLEN ) count_avg
      from syscat.columns
      group by tabname,tabschema ) c
  where a.tbspaceid = b.tbspaceid
    and a.tabname = c.tabname
        and a.tabschema = c.tabschema
    and card > 600000000
====

请大家看看,是不是还有什么地方需要修改(性能等)?


另外,如何估算一张表的空间使用率,除了用根据记录平均长度,还有npage等,还有什么其它更好一点的方法?


先谢谢大家了!
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
2#
发表于 2008-5-9 02:16 | 只看该作者
不大明白怎样定义“使用率“这个单词?从你的query看起来好像没有什么比例除法呀?怎样定义这个“率“呢?(card*avg_rowsize)/(npage*pagesize)?还是和表占用的空间表空间总大小的比例?

使用道具 举报

回复
论坛徽章:
2
祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
3#
 楼主| 发表于 2008-5-9 09:20 | 只看该作者
这里的使用率是指 card/(total_space/avg_rowsize)

card:表中现有的记录数。
total_space/avg_rowsize:是指一张比如4K或者8K或者16K等,再根据表的平均记录长度,来计算出这张表总共可以有多少条记录数。

其实我想从另一种角度考虑,应该是表占用的空间表空间总大小的比例。

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
4#
发表于 2008-5-10 00:36 | 只看该作者
基本上可以用NPAGE得到表占用空间总大小,而对于表里面的可以插入数据的空当,你的统计方法感觉基本没什么问题,就是要注意有的时候可能记录之间存在一些空洞并不足以放下一个记录,这样这些空洞也很难被使用到……所以如果发现这个统计的比率比较低,就应该做一做reorg了

使用道具 举报

回复
论坛徽章:
9
授权会员
日期:2006-06-15 15:15:15会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44铁扇公主
日期:2007-10-26 16:08:48生肖徽章2007版:鼠
日期:2008-01-02 17:35:532008新春纪念徽章
日期:2008-02-13 12:43:03奥运会纪念徽章:田径
日期:2008-08-19 09:59:402010广州亚运会纪念徽章:高尔夫球
日期:2010-11-22 15:29:49优秀写手
日期:2014-02-28 06:00:13
5#
发表于 2008-5-10 07:51 | 只看该作者
应该不是实际的使用的空间的大小的,比如碎片什么的?一般情况下,实际使用的空间应该大于npage* pagesize的大小。

使用道具 举报

回复
论坛徽章:
2
祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
6#
 楼主| 发表于 2008-5-12 14:50 | 只看该作者
谢谢了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表