可能是数据量过大造成的,也可能是磁盘使用时间太长,产生的磁盘脆片太多造成的。先整理磁盘碎片,然后 dbcc checkdb 修复一下数据库看看

解决方案 »

  1.   

    如果收缩没用,你应该分析下表空间的使用情况,如下:if not exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tablespaceinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)create table tablespaceinfo --创建临时表
    (nameinfo varchar(50) ,  --表名
    rowsinfo int ,  --表中现有的行数
    reserved varchar(20) , --表空间总量
    datainfo varchar(20) ,   --表中数据的空间量
    index_size varchar(20) ,   --表中索引使用的空间量
    unused varchar(20) ) --表中未用的空间量delete from tablespaceinfodeclare @tablename varchar(255)
    declare @cmdsql varchar(500)DECLARE Info_cursor CURSOR FOR 
    select name 
    from dbo.sysobjects where OBJECTPROPERTY(id, N'IsTable') = 1 
    and name not like N'#%%' order by nameOPEN Info_cursorFETCH NEXT FROM Info_cursor 
    INTO @tablename WHILE @@FETCH_STATUS = 0
    BEGINif exists (select * from dbo.sysobjects where id = object_id(@tablename) and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    execute sp_executesql 
    N'insert into tablespaceinfo exec sp_spaceused @tbname',
    N'@tbname varchar(255)',
    @tbname = @tablenameFETCH NEXT FROM Info_cursor 
    INTO @tablename 
    ENDCLOSE Info_cursor
    DEALLOCATE Info_cursor
    GO
    --表空间信息
    select * 
    from tablespaceinfo 
    order by cast(left(ltrim(rtrim(reserved)) , len(ltrim(rtrim(reserved)))-2) as int) desc
      

  2.   

    一般造成mdf文件过大的原因是:
    1.索引碎片过多,
    2.频繁的数据库操作,如临时表/存储过程等的占用大量的空间,而没有及时释放.
    3.异常状况下占用的数据库空间没有释放掉.....