分享

SQL Server 2005 查看数据库表的大小 按照表大小排列

 老鹤闲聊 2015-09-10
(1)Question:尼玛一个数据库,动辄几十个G,伤不起啊,怎样才能知道当前数据库里面各个表的大小呢?以便将部分较大的数据库表中不容易被频繁访问的数据归档到历史表中,例如每天将一个自然年以前的数据放入历史表中。
(2)Key:网上搜了一圈,关键字sp_spaceused (参见:http://msdn.microsoft.com/zh-cn/library/ms188776.aspx)
(3)Sample:同时找到了一个示例(参见:http://www./linuxxitongguanli/519.html 推荐: SQL Server 2005 查看数据库表的大小 按照表大小排列),下面就将这个示例的代码原样抄写下来,供大家分享啦!对了,我在2005上验证过,代码没有什么大问题。
(4)Code:
(4.1)将表大小占用情况存放到新创建的 tablespaceinfo表中
SQL code
if not exists (select from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]'and OBJECTPROPERTY(id, N'IsUserTable') = 1)
create table tablespaceinfo --创建结果存储表
(nameinfo varchar(50) , 
rowsinfo int , reserved varchar(20) , 
datainfo varchar(20) , 
index_size varchar(20) , 
unused varchar(20) )
 
delete from tablespaceinfo --清空数据表
 
declare @tablename varchar(255) --表名称
 
declare @cmdsql varchar(500)
 
DECLARE Info_cursor CURSOR FOR 
select o.name 
from dbo.sysobjects o where OBJECTPROPERTY(o.id, N'IsTable') = 1 
and o.name not like N'#%%' order by o.name
 
OPEN Info_cursor
 
FETCH NEXT FROM Info_cursor 
INTO @tablename 
 
WHILE @@FETCH_STATUS = 0
BEGIN
 
if exists (select from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
execute sp_executesql 
N'insert into tablespaceinfo exec sp_spaceused @tbname',
N'@tbname varchar(255)',
@tbname = @tablename
 
FETCH NEXT FROM Info_cursor 
INTO @tablename 
END
 
CLOSE Info_cursor
DEALLOCATE Info_cursor
GO


(4.2)查看当前数据库大小情况
SQL code
--itlearner注:显示数据库信息
sp_spaceused @updateusage = 'TRUE' 

(4.3)查看存放了当前数据库各个表大小的tablespaceinfo表中记录
SQL code
--itlearner注:显示表信息
select 
from tablespaceinfo 
order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as intdesc 

更多 0

sp_spaceused的结果有时是不准确的, 要加updateusage选项才行.
SQL code
1
sp_spaceused @objname=N'[表名]',@updateusage=true

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多