当前位置: 代码迷 >> Sybase >> ,请教怎么获取sybase数据库中各个表的大小?
  详细解决方案

,请教怎么获取sybase数据库中各个表的大小?

热度:8731   发布时间:2013-02-26 00:00:00.0
各位高手,请问如何获取sybase数据库中各个表的大小??
如何列举出sybase数据库中所有表的大小并按从大到小的顺序排列,请各位高手指教,谢谢!

------解决方案--------------------------------------------------------

select name = o.name,
iname = i.name,
i.id,
low = d.low,
rowtotal = 0,
reserved = convert(numeric(20, 9), 0),
data = convert(numeric(20, 9), i.doampg),
index_size = convert(numeric(20, 9), i.ioampg),
unused = convert(numeric(20, 9), 0)
into #pagecounts
from sysobjects o, sysindexes i, master.dbo.spt_values d
where o.id = i.id
and d.number = 1
and d.type = "E "

update #pagecounts set
rowtotal = rowcnt(data),
reserved = convert(numeric(20, 9),
(reserved_pgs(id, data) +
reserved_pgs(id, index_size))),
data = convert(numeric(20, 9), data_pgs(id, data)),
index_size = convert(numeric(20, 9),
data_pgs(id, index_size)),
unused = convert(numeric(20, 9),
((reserved_pgs(id, data) +
reserved_pgs(id, index_size)) -
(data_pgs(id, data) +
data_pgs(id, index_size))))

select name = convert(char(20), name),
rowtotal = convert(char(11), sum(rowtotal)),
reserved = convert(char(15), convert(varchar(11),
convert(numeric(11, 0), sum(reserved) *
(low / 1024))) + " " + "KB "),
data = convert(char(15), convert(varchar(11),convert(numeric(11, 0), sum(data) * (low / 1024))) + " " + "KB "),
index_size = convert(char(15), convert(varchar(11),
convert(numeric(11, 0), sum(index_size) *
(low / 1024))) + " " + "KB "),
unused = convert(char(15), convert(varchar(11),
convert(numeric(11, 0), sum(unused) *
(low / 1024))) + " " + "KB ")
from #pagecounts
group by name
order by sum(data)+ sum(index_size) desc