【问题标题】:Excessive reserved space on SQL ServerSQL Server 上的预留空间过多
【发布时间】:2009-09-02 15:19:27
【问题描述】:

我们有一个在 MSDE(SQL 2000,Service Pack 4)下运行的数据库,它保留了大量的多余空间。对每个表使用 sp_spaceused 给出的总保留大小为 2102560 KB,数据大小为 364456 KB,未使用大小为 1690760 KB(即保留近 4 倍的已用空间)。最糟糕的罪魁祸首是经常写入但从未从(事务日志记录)中删除的表。一般来说,删除很少见,而且在大小和记录数量方面都非常小。

磁盘上的数据库文件有 2 GB 的限制,这会导致备份等问题。

我尝试了 DBCC SHRINKDATABASE、DBCC SHRINKFILE 和 DBCC REINDEX,但对磁盘上使用的文件大小没有影响

2 个问题 - 如何缩小数据库文件大小以及如何阻止 SQL Server 保留多余空间?

谢谢

保罗

【问题讨论】:

    标签: sql sql-server msde


    【解决方案1】:

    使用
    GO
    使用 TRUNCATE_ONLY 备份日志

    DBCC SHRINKDATABASE ( )

    DBCC SHRINKFILE (, 5)

    DBCC SHRINKFILE (, 5)
    去吧

    如果您不知道文件路径 exec sp_helpfile

    【讨论】:

    • 试过了,但没有将保留空间缩小 1 个字节
    • 在备份日志和收缩文件之间使用 DBCC SHRINKDATABASE ('DatabaseName')
    • 这对我来说是一种享受。谢谢@Russell!简单说明一下:对于 DBCC SHRINKFILE 命令,我在 DBNAME 数据库中使用了 SELECT * FROM sys.database_files 并使用了“名称”字段。
    【解决方案2】:

    您可以做的是进行完整的数据库备份,重新索引数据库,逐步缩小它,然后再次重新索引它。这样,您将拥有当前大小的数据库。

    您还应该将日志记录表移动到另一个表。

    【讨论】:

    • 不幸的是(我不知道为什么),备份是不可能的。尝试备份到磁盘时会超时。
    【解决方案3】:

    为最坏的罪魁祸首创建单独的文件并将它们放在单独的文件组中。将表移动到另一个文件本身将压缩它们。也将使收缩文件更有效。如果需要,您可以为每个表创建多个文件。

    【讨论】:

    • 问题是 MSDE 有 2 gig 的限制。创建新文件组是不可能的,因为限制超过了文件组的总数,而不仅仅是每个文件组。
    【解决方案4】:

    感谢所有建议。最后,我不得不创建一个新的空数据库,从海量数据库中复制数据,然后重命名数据库。

    我会留意保留的尺寸。希望导致此问题的数据库设置有问题。我们使用相同软件/MSDE 的其他客户都没有遇到此问题。

    【讨论】:

      猜你喜欢
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      相关资源
      最近更新 更多