免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2941 | 回复: 2
打印 上一主题 下一主题

有关数据库大小计算的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-08 23:47 |只看该作者 |倒序浏览
遇见过这样的情况:
sybsystemprocs库损坏,系统存储过程无法使用,当时需要计算数据库大小sp_helpdb已不能使用。

查看master库sysusages表来计算数据库大小

dbid   segmap      lstart      size        vstart      pad    unreservedpgs
         crdate                     
------ ----------- ----------- ----------- ----------- ------ -------------
         --------------------------
      1           7           0        3072           4   NULL           821
                Oct 17 2007 10:29AM
      1           7        3072      145408        6660   NULL        144817
                Oct 17 2007 10:29AM
      2           7           0        1536        4100   NULL           925
                Oct 17 2007 10:29AM
      3           7           0        1024        3076   NULL           415
                Oct 17 2007 10:29AM
  31513           7           0        1024        5636   NULL           367
                Oct 17 2007 10:29AM
  31514           7           0      102400    16777216   NULL         72907
                Oct 17 2007 10:29AM




sp_helpdb:


name                     db_size       owner                    dbid  
         created           
         status                                                                                                
------------------------ ------------- ------------------------ ------
         ------------------
         ------------------------------------------------------------------------------------------------------
master                        290.0 MB sa                            1
         Oct 17, 2007      
         mixed log and data                                                                                    
model                           2.0 MB sa                            3
         Oct 17, 2007      
         mixed log and data                                                                                    
sybsystemdb                     2.0 MB sa                        31513
         Oct 17, 2007      
         mixed log and data                                                                                    
sybsystemprocs                200.0 MB sa                        31514
         Oct 17, 2007      
         trunc log on chkpt, mixed log and data                                                                 
tempdb                          3.0 MB sa                            2
         Mar 11, 2009      
         select into/bulkcopy/pllsort, trunc log on chkpt, mixed log and data


但是在这个表中的值必须乘2才是真正数据库的大小(恢复数据库的操作是老大做的,他给我说需要乘2),回来自己研究sp_helpdb存储过程也没看出来需要乘已2呀。小弟是新手对sp_helpdb 的存储过程看的不是很懂还请各位大哥给指点一下。

和db_size 有关也。

u.size参数:
还是从sysusages取出写到spbusages临时表了也没有乘2呀

select u.dbid, u.segmap, u.lstart, u.size, u.vstart, u.unreservedpgs, u.crdate
        into #spdbusages
        from #spdbdesc, master.dbo.sysusages u
        where #spdbdesc.dbid = u.dbid

@numpgsmb 参数:

declare @numpgsmb         float               

select @numpgsmb = (1048576. / v.low)
        from master.dbo.spt_values v
                 where v.number = 1
                 and v.type = "E"



db_size计算:
if (@len1 > 24 or @len2 > 24)
        select distinct name = d.name,
                db_size = str(sum(u.size) / @numpgsmb, 10, 1)
                        + " MB",
                owner = l.name,
                dbid = d.dbid,
                created = convert(char(14), d.crdate, 107),
                status = #spdbdesc.dbdesc
                        from master.dbo.sysdatabases d, master.dbo.syslogins l,
                                 #spdbusages u, #spdbdesc
                where d.dbid = #spdbdesc.dbid
                        and d.suid = l.suid
                        and #spdbdesc.dbid = u.dbid
                group by #spdbdesc.dbid
                having d.dbid = #spdbdesc.dbid
                        and d.suid = l.suid
                        and #spdbdesc.dbid = u.dbid
                order by d.name
else
        select distinct name = convert(char(24), d.name),
                db_size = str(sum(u.size) / @numpgsmb, 10, 1)
                        + " MB",
                owner = convert(char(24), l.name),
                dbid = d.dbid,
                created = convert(char(14), d.crdate, 107),
                status = #spdbdesc.dbdesc
                        from master.dbo.sysdatabases d, master.dbo.syslogins l,
                                 #spdbusages u, #spdbdesc
                where d.dbid = #spdbdesc.dbid
                        and d.suid = l.suid
                        and #spdbdesc.dbid = u.dbid
                group by #spdbdesc.dbid
                having d.dbid = #spdbdesc.dbid
                        and d.suid = l.suid
                        and #spdbdesc.dbid = u.dbid
                order by d.nam





还请高手给指点一下。谢谢了

[ 本帖最后由 coco_andy 于 2009-3-9 00:18 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-03-09 09:50 |只看该作者
sysuage是size是page的数量,
page size 是2k
102400*2K=200m

论坛徽章:
0
3 [报告]
发表于 2009-03-09 14:46 |只看该作者
哦。谢谢楼上这位大哥了,我也查了一下sysuages表中字段的意思。

名称                    数据类型                   说明
dbid                    smallint                   数据库ID
segmap              int                           可能的段赋值位图
lstart                  int                           第一个数据库(逻辑)页的页码
size                    int                           相邻数据可库(逻辑)页的数目
vstart                 int                           起始虚拟页的页码
pad                    smallint                   未使用
unreservedpgs   int                          不属于已分配扩展的可用空间
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP