Edu*_*ada 4 sql-server disk-space
我刚刚在我的数据库上运行了一份磁盘使用情况报告,发现它在过去一个月中增长了很多,目前在数据上使用了 3.98 GB(上个月大约是 300 MB)
但是,当我按表运行磁盘使用情况报告时,我发现表中的空间使用情况目前与 3.98 GB 相差甚远
我如何才能找到正在使用剩余空间的内容,以便将其加起来为 3.98 GB?
编辑
这是“收缩文件”对话框的屏幕截图:
有些“内部”表、队列等不会出现在某些报告/查询中,因为它们是系统对象。如果您运行下面的查询,它计算当前数据库中数据文件中定义的实际页面数,您应该看到“保留”字段之一(匹配适当的“KB”、“MB”或“GB”) " 字段)与该报告的数据文件部分中的“已用空间”值匹配。
;WITH cte AS
(
SELECT COUNT(*) AS [Reserved],
SUM(CASE WHEN pa.[is_allocated] = 1 THEN 1 ELSE 0 END) AS [Allocated]
FROM sys.dm_db_database_page_allocations(DB_ID(), NULL, NULL, NULL, DEFAULT) pa
)
SELECT [Reserved] AS [ReservedPages],
[Allocated] AS [AllocatedPages],
'---' AS [---],
([Reserved] * 8) AS [ReservedKB],
([Allocated] * 8) AS [AllocatedKB],
'---' AS [---],
([Reserved] * 8) / 1024.0 AS [ReservedMB],
([Allocated] * 8) / 1024.0 AS [AllocatedMB],
'---' AS [---],
([Reserved] * 8) / 1024.0 / 1024.0 AS [ReservedGB],
([Allocated] * 8) / 1024.0 / 1024.0 AS [AllocatedGB]
FROM cte;
Run Code Online (Sandbox Code Playgroud)
下面是获取每个对象详细信息以及顶部总计行的查询:
SELECT sch.[name], obj.[name], ISNULL(obj.[type_desc], N'TOTAL:') AS [type_desc],
COUNT(*) AS [ReservedPages],
(COUNT(*) * 8) AS [ReservedKB],
(COUNT(*) * 8) / 1024.0 AS [ReservedMB],
(COUNT(*) * 8) / 1024.0 / 1024.0 AS [ReservedGB]
FROM sys.dm_db_database_page_allocations(DB_ID(), NULL, NULL, NULL, DEFAULT) pa
INNER JOIN sys.all_objects obj
ON obj.[object_id] = pa.[object_id]
INNER JOIN sys.schemas sch
ON sch.[schema_id] = obj.[schema_id]
GROUP BY GROUPING SETS ((sch.[name], obj.[name], obj.[type_desc]), ())
ORDER BY [ReservedPages] DESC;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3078 次 |
最近记录: |