【转】查询数据库各表当前使用的存储大小,并收缩空间,释放可用空间

引自:https://www.cnblogs.com/cinemaparadiso/p/12581644.html

USE [JwsoftBsFrame_WeiXin] -- replace your dbname
GO
SELECT
s.Name AS SchemaName,
t.Name AS TableName,
p.rows AS RowCounts,
CAST(ROUND((SUM(a.used_pages) / 128.00), 2) AS NUMERIC(36, 2)) AS Used_MB,
CAST(ROUND((SUM(a.total_pages) - SUM(a.used_pages)) / 128.00, 2) AS NUMERIC(36, 2)) AS Unused_MB,
CAST(ROUND((SUM(a.total_pages) / 128.00), 2) AS NUMERIC(36, 2)) AS Total_MB
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
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
GROUP BY t.Name, s.Name, p.Rows
ORDER BY s.Name, t.Name
GO

根据以上语句可以查看某数据库的每张表占的存储大小,根据需要对用不到的数据进行清理。

比如 tableA占用 2000MB,可以truncate table此表数据,此时数据库会将此表占用的空间释放成 可用空间。

右键数据库 属性->选项->恢复模式  改为简单。

右键数据库 任务->收缩->文件 ,根据需要收缩数据释放可用空间或收缩日志文件

 选择"在释放未使用的空间前重新组织页(0)",根据右侧的提示(最小未1052MB)  设置收缩后的大小,必须大于提示中的最小大小。

 收缩完成后,右键数据库 属性->选项->恢复模式  改为完整 

原文地址:https://www.cnblogs.com/Violety/p/15777735.html