如何找出哪个物体正在占用空间?

Muh*_*mis 6 sql-server

我有大小为 537gb 的数据库。我怎样才能找出哪个对象正在占用空间。我执行了 sp_spaceused,它显示我未分配的空间是 502GB 和 88GB 的​​已用空间。如何释放未分配的空间以获得一些可用空间。由于这个原因,我的硬盘快满了。请指教。

数据库大小 T-SQL 数据库信息

编辑:我也通过以下脚本进行了检查。但每个表的总 UsedSpaceMB 为 47GB。我仍然无法弄清楚 DB 大小是 537 GB。

SELECT t.NAME AS TableName, s.Name AS SchemaName, p.rows AS RowCounts, SUM(a.total_pages) * 8 AS TotalSpaceKB, CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB, SUM(a.used_pages) * 8 AS UsedSpaceKB, CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB, CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB
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
LEFT OUTER JOIN sys.schemas s
    ON t.schema_id = s.schema_id
WHERE t.NAME NOT LIKE 'dt%'
    AND t.is_ms_shipped = 0
    AND i.OBJECT_ID > 255
GROUP BY t.Name, s.Name, p.Rows
ORDER BY 7 DESC
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Ran*_*gen 9

您的数据库数据文件似乎有空白空间。

如果您确定数据文件不会再次增长,您可以缩小文件。

如果有缩水,最彻底的方法与做这个TRUNCATEONLY,所以你不要动任何数据页和仅释放空间给操作系统,如果它是可能的。

您可以使用此查询获取数据文件,将数据库名称更改为您的数据库。

SELECT [name]
FROM sys.master_files
WHERE database_id = db_id('DatabaseName')
AND type_desc = 'ROWS';
Run Code Online (Sandbox Code Playgroud)

之后,您可以尝试将数据页缩小到 100GB 而不进行任何移动。

Use [DatabaseName]
GO
DBCC SHRINKFILE ('name',102400 ,TRUNCATEONLY);
-- try to shrink until 100GB, without moving data pages
Run Code Online (Sandbox Code Playgroud)

您可以阅读缩小的日期文件并...


Geo*_*e K 3

您可以使用类似这样的脚本来查找表及其大小:

  SELECT name = OBJECT_SCHEMA_NAME(object_id) + '.' + OBJECT_NAME(object_id), 
       rows = SUM(CASE
                      WHEN index_id < 2
                      THEN row_count
                      ELSE 0
                  END), 
       reserved_mb = 8 * SUM(reserved_page_count) / 1024, 
       data_mb = 8 * SUM(CASE
                             WHEN index_id < 2
                             THEN in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count
                             ELSE lob_used_page_count + row_overflow_used_page_count
                         END) / 1024, 
       index_mb = 8 * (SUM(used_page_count) - SUM(CASE
                                                      WHEN index_id < 2
                                                      THEN in_row_data_page_count + lob_used_page_count + row_overflow_used_page_count
                                                      ELSE lob_used_page_count + row_overflow_used_page_count
                                                  END)) / 1024, 
       unused_mb = 8 * SUM(reserved_page_count - used_page_count) / 1024
FROM sys.dm_db_partition_stats
WHERE object_id > 1024
GROUP BY object_id
ORDER BY reserved_mb DESC;
Run Code Online (Sandbox Code Playgroud)