2011-02-07 46 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

相關問題