怎么查看各表占用的包括 lob 的实际空间,有没有这样的sql语句
select OBJECT_NAME(ID)
,SIZE = sum(reserved) * CONVERT(FLOAT, (SELECT LOW FROM MASTER.DBO.SPT_VALUES WHERE NUMBER = 1 AND TYPE = 'E')) /1024.00/1024.00
--表大小(字节)= 8192 x Num_Pages (M)
from sysindexes
where indid in (0,1,255)
GROUP BY ID
ORDER BY SIZE DESC
各个表都占用的空间不大,但是整个数据库有4g之大,我想知道怎么查询出实际占用的空间,有没有办法。
百分百结贴
[解决办法]
sp_spaceused 表名
[解决办法]
sp_spaceused
显示行数、保留的磁盘空间以及当前数据库中的表所使用的磁盘空间,或显示由整个数据库保留和使用的磁盘空间。
示例
A. 有关表的空间信息
下例报告为 titles 表分配(保留)的空间量、数据使用的空间量、索引使用的空间量以及由数据库对象保留的未用空间量。
USE pubs
EXEC sp_spaceused 'titles '
B. 有关整个数据库的已更新空间信息
下例概括当前数据库使用的空间并使用可选参数 @updateusage。
USE pubs
sp_spaceused @updateusage = 'TRUE '
[解决办法]
sp_spaceuser 表名
[解决办法]
declare @a varchar(100)declare csr_tbname cursor for select [name] from sys.objects where type='U'open csr_tbname fetch next from csr_tbname into @a;while @@FETCH_STATUS=0begin exec sp_spaceused @a; fetch next from csr_tbname into @a;endclose csr_tbname;deallocate csr_tbname;-- 这样查出来的总和也不会等于数据库的大小,我试过,并且差距很大。-- sp_helpdb
[解决办法]
2005后,用这个存储过程看看。
USE MASTER GO IF OBJECT_ID('sp_tableinfo') IS NOT NULL DROP PROC sp_tableinfo GO CREATE PROCEDURE sp_tableinfo @tblPat SYSNAME = '%' ,@sort CHAR(1) = 'm' AS --Written by Tibor Karaszi 2010-09-30--Modified 2010-10-10, fixed rowcount multiplied by number of indexes.--Modified 2010-10-11, fixed rowcount incorrect with BLOB and row overflow data.WITH t AS(SELECT SCHEMA_NAME(t.schema_id) AS schema_name,t.name AS table_name,SUM(CASE WHEN p.index_id IN(0,1) AND a.type_desc = 'IN_ROW_DATA' THEN p.rows ELSE 0 END) AS rows,SUM(CAST((a.total_pages * 8.00) / 1024 AS DECIMAL(9,2))) AS MB ,SUM(a.total_pages) AS pages ,ds.name AS locationFROM sys.tables AS tINNER JOIN sys.partitions AS p ON t.OBJECT_ID = p.OBJECT_IDINNER JOIN sys.allocation_units AS a ON p.hobt_id = a.container_id INNER JOIN sys.data_spaces AS ds ON a.data_space_id = ds.data_space_idWHERE t.name LIKE @tblPat GROUP BY SCHEMA_NAME(t.schema_id), t.name, ds.name )SELECT schema_name, table_name, rows, MB, pages, locationFROM tORDER BYCASE WHEN @sort = 'n' THEN table_name END,CASE WHEN @sort = 'r' THEN rows END DESC,CASE WHEN @sort = 'm' THEN MB END DESC,CASE WHEN @sort = 's' THEN schema_name ENDGO