代码改变世界

sqlserver数据库中的mdf文件太大,表空间分析和表空间释放

2019-12-02 15:54  wolfer_3  阅读(4575)  评论(0编辑  收藏  举报

查询数据库的大小:

EXEC sp_spaceused

为了保证查询结果的实时性,推荐使用 @updateusage 参数来确保统计数据是最新的:

EXEC sp_spaceused @updateusage = N'TRUE';

具体查询某个表的大小:

EXEC sp_spaceused 't_table'

 

分析查询数据库中所有表占用的内存大小:

declare @table_spaceused table (
name nvarchar(100) ,
rows int ,reserved nvarchar(100) ,
data nvarchar(100) ,index_size nvarchar(100) ,
unused nvarchar(100) )
insert into @table_spaceused (name,rows,reserved,data,index_size,unused ) exec sp_MSforeachtable @command1='exec sp_spaceused ''?'''
select * from @table_spaceused

字段含义:

  • name:表名
  • rows:行数
  • reserved:数据库为该表分配的空间
  • data:数据实际使用的空间,reserved肯定>=data
  • index_size:索引使用的空间
  • unused:为数据库中的对象保留但尚未使用的空间总量,大致等于reserved - data - index_size的值

然后根据表中的业务选择性删除无用的数据,truncate table 表名来清空表中无用的数据。

 

最后一步,使用数据库自带的收缩功能,来进行收缩数据库中mdf文件的大小。

右键数据库—–>任务——->收缩———->数据库(或者文件)。

我本地之前数据库30多个g的文件,后面压缩成了1个多g文件。