【问题标题】:SQL Server unused, but allocated table space [closed]SQL Server 未使用,但已分配表空间 [关闭]
【发布时间】:2008-09-05 18:06:46
【问题描述】:

我的 ms sql 数据库变得非常大。经过检查,我发现某些表中有一堆未使用的空间。我不做很多物理删除,所以我不认为它只是删除了记录。 DBCC SHRINK 不会使文件变小。但是,如果我将表转储到一个新的空数据库,则大小会下降大约 80%。而不是我在当前数据库的这个表中的 7gb,我最终在新数据库中得到了大约 1.5gb。好像 sql server 分配了太多内存。有人遇到过这个吗?我希望能够通过删除未使用的分配空间来缩小表,而不必创建一个全新的数据库。

附加信息:

使用完全恢复模式。我会尝试重建索引,我想已经有一段时间了。 ldf 每天都会使用一些截断它们的古怪存储过程来缩小。

【问题讨论】:

  • 你试过重建索引吗?
  • 看看这篇知识库文章,看看它是否适用:support.microsoft.com/kb/913399
  • 这有关系吗?知识库文章 924027 - SQL Server significantly increases the unused space for some tables
  • 如果您对 LDF 所做的只是截断它们,那么使用完全恢复模型绝对没有任何意义!使它们缩小的正确方法是备份日志文件,届时它们将自动缩小。迫切需要了解日志链和正确备份策略的人介入并帮助您正确处理。任何不足都会让您面临丢失数据的可怕风险

标签: sql-server


【解决方案1】:

我发现,如果您不注意备份您的转换日志文件 (LDF),您会遇到类似的情况。我不能足够强调拥有良好备份“卫生”的重要性。如果出现问题,它不仅可以节省您的培根,而且我还将帮助维护一个很好的紧密数据库。

【讨论】:

  • 同意,永远不要忘记备份事务日志以及数据库备份。日志会不断增长,直到它吃掉你的整个硬盘。
【解决方案2】:

我不做很多物理删除

表的更新怎么样,碎片级别是多少。运行 DBCC SHOWCONTIG,如果索引高度碎片化,则重建索引。之后使用 TRUNCATE_ONLY 执行 BACKUP LOG,然后执行 SHRINK 命令

【讨论】:

    【解决方案3】:

    在选项中,您可以指定要增长多少。默认情况下我相信它是 10%,所以给定一个 200MB 的数据库,当你填满最后一页时,它会再分配 20MB 的页面空间。在 7GB 时,它将分配 700MB。

    我不知道在创建数据库后可以在哪里修改它,但我知道在创建数据库时它就有了。一点谷歌工作很可能会向您揭示答案。

    注意:我的答案不是如何修复它,而是如何防止/解释为什么您可能会看到所有这些未分配的空间。

    【讨论】:

      【解决方案4】:

      我曾经遇到过类似的问题,我相信如果给定表上没有聚集索引,我发现重新索引/收缩不会回收所有未使用的空间。

      【讨论】:

        【解决方案5】:

        可能是在为索引打开填充的情况下构建表。人们建立填充索引的原因是为了防止页面拆分。

        右键单击 SQL 管理器中的表并选择 SCRIPT TABLE。然后看看有没有PAD_INDEX=OFF。如果PAD_INDEX 正在使用中,那可能是表格占用空间的地方。

        【讨论】:

          【解决方案6】:

          这在过去对我有用

          USE [DBNAME]
          GO
          
          DBCC SHRINKFILE (N'FILENAME' , 0, TRUNCATEONLY)
          
          GO
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-04-09
            • 2016-06-06
            • 2015-02-17
            • 1970-01-01
            • 2021-12-09
            • 2016-02-18
            • 2020-08-11
            相关资源
            最近更新 更多