2011-02-07 91 views
1

我试图确定我的SQL Server数据库是否健康。数据库大小报告与SQL Server中所有表的总和不同

我运行了一些命令来检查大小,我对表格大小总和与数据库大小之间报告的差异感到震惊。

我想知道为什么有这么大的尺寸差异。

EXEC sp_spaceused @updateusage = N'TRUE'; 

database_name | database_size | unallocated space 
FleetEquip |1357.00 MB  |0.20 MB 

EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'" 

(太多的格式,包括所有的表 - 一个HTML表将是很好)

name   | rows | reserved(KB) | data(KB) | index_size(KB) | unused(KB) 
EquipmentState | 131921 | 40648  | 40608 | 8    | 32 

所有表的总和来45768 KB

回答

3

你可以看看sp_spaceusedEXEC sp_helptext 'sp_spaceused'

的定义虽然我更喜欢通过实际以下返回的结果格式:

select object_definition(object_id('sp_spaceused')) as [processing-instruction(x)] FOR XML PATH

你可以试试下面的(基于聚集查询它包含)并查看差异在哪里?

select OBJECT_NAME(p.object_id), 
reservedpages = sum(a.total_pages), 
    usedpages = sum(a.used_pages), 
    pages = sum(
      CASE 
       -- XML-Index and FT-Index internal tables are not considered "data", but is part of "index_size" 
       When it.internal_type IN (202,204,211,212,213,214,215,216) Then 0 
       When a.type <> 1 Then a.used_pages 
       When p.index_id < 2 Then a.data_pages 
       Else 0 
      END 
     ) 
from sys.partitions p join sys.allocation_units a on p.partition_id = a.container_id 
    left join sys.internal_tables it on p.object_id = it.object_id 
GROUP BY p.object_id 
with rollup 
-1

MSSQL根据需要为其表分配内存......但是,当行被删除时,数据库不会“收缩”。它类似于DOS,偶尔需要对驱动器进行“碎片整理”。有些工具可以让您在需要时整理/收缩数据库。

+0

内存?你的意思是磁盘空间,对吧? – 2011-02-07 19:24:48

相关问题