与实际数据相比,SQL Server数据库太大

时间:2017-04-26 13:20:39

标签: sql-server sql-server-2014

我们正在使用SQL Server 2014.我们有一个大小为12 GB的数据库。 我使用了以下查询,可以看到文件大小为:

SELECT ((size * 8)/1024), * 
FROM sys.sysfiles

这表明.mdf文件为3 GB,.ldf文件为9 GB。

然后我使用以下查询来查看实际的表大小:

SELECT 
    t.NAME AS TableName,
    i.name as indexName,
    p.[Rows],
    SUM(a.total_pages) as TotalPages, 
    SUM(a.used_pages) as UsedPages, 
    SUM(a.data_pages) as DataPages,
    (SUM(a.total_pages) * 8) / 1024 as TotalSpaceMB, 
    (SUM(a.used_pages) * 8) / 1024 as UsedSpaceMB, 
    (SUM(a.data_pages) * 8) / 1024 as DataSpaceMB
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
WHERE 
    t.NAME NOT LIKE 'dt%' AND
    i.OBJECT_ID > 255 AND   
    i.index_id <= 1
GROUP BY 
    t.NAME, i.object_id, i.index_id, i.name, p.[Rows]
ORDER BY 
    5 desc

这表明总大小只有40 MB。

但是,我们想知道.mdf文件中占用3 GB的剩余空间是什么。

请帮助我们找出在mdf和ldf文件中占用太多空间的对象。

非常感谢你的时间!

1 个答案:

答案 0 :(得分:3)

尝试使用“sp_spaceused”的预定义存储过程来检查数据库使用的空间。

USE <database_name>
EXEC sp_spaceused

它将生成一个看起来像这样的输出......

enter image description here

数据库名称显示在第一行的第一列中。

请注意......

database_size =保留空间+未分配空间+日志空间

sp_spaceused不显示日志空间量,但可以根据sp_spaceused生成的结果计算。

有关详细信息,请参阅sp_spaceused上的DataRinger.com page

此页面中的以下图像描述了构成整体数据库大小的不同SQL Server区域。

enter image description here

我怀疑数据库的事务日志文件占用了数据库中未计入空间的空间。

"Manage the Size of the Transaction Log File"是一个Microsoft页面,提供有关日志文件的信息。这可以帮助您使用数据库。