查看SQL SERVER数据空间分配情况
类别: 数据库教程
今天客户反映数据库文件空间增长过快 ,需要分析数据库表存放空间分配情况,临时写了以下过程,
与大家共享。
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
--knowsky.com数据库信息
sp_spaceused @updateusage = \'TRUE\'
--表信息
select *
from tablespaceinfo
order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc
备注:
Name nvarchar(20) 为其请求空间使用信息的表名。
Rows char(11) 表中现有的行数。
reserved varchar(18) 表保留的空间总量。
Data varchar(18) 表中的数据所使用的空间量。
index_size varchar(18) 表中的索引所使用的空间量。
Unused varchar(18) 表中未用的空间量。
与大家共享。
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
--knowsky.com数据库信息
sp_spaceused @updateusage = \'TRUE\'
--表信息
select *
from tablespaceinfo
order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc
备注:
Name nvarchar(20) 为其请求空间使用信息的表名。
Rows char(11) 表中现有的行数。
reserved varchar(18) 表保留的空间总量。
Data varchar(18) 表中的数据所使用的空间量。
index_size varchar(18) 表中的索引所使用的空间量。
Unused varchar(18) 表中未用的空间量。
- 上一篇: SQL SERVER编写存储过程小工具(三)
- 下一篇: 使用正规表达式编写更好的SQL
-= 资 源 教 程 =-
文 章 搜 索