我们正在使用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文件中占用太多空间的对象。
非常感谢你的时间!
答案 0 :(得分:3)
尝试使用“sp_spaceused”的预定义存储过程来检查数据库使用的空间。
USE <database_name>
EXEC sp_spaceused
它将生成一个看起来像这样的输出......
数据库名称显示在第一行的第一列中。
请注意......
database_size =保留空间+未分配空间+日志空间
sp_spaceused不显示日志空间量,但可以根据sp_spaceused生成的结果计算。
有关详细信息,请参阅sp_spaceused上的DataRinger.com page。
此页面中的以下图像描述了构成整体数据库大小的不同SQL Server区域。
我怀疑数据库的事务日志文件占用了数据库中未计入空间的空间。
"Manage the Size of the Transaction Log File"是一个Microsoft页面,提供有关日志文件的信息。这可以帮助您使用数据库。