【问题标题】:shrink database file in one shot or in increments?一次性或增量收缩数据库文件?
【发布时间】:2012-05-10 14:04:39
【问题描述】:

我必须缩小大约 100 的数据库。 1TB 降至 700GB 左右(留出 200+ Gb 用于增长而无需扩展)。我有一个脚本,它将按设定的增量(例如 1GB)循环和缩小数据库。这在您必须随时中止的情况下非常有用,因为进度不会丢失,总收缩操作可能会运行 4-5 天。问题是,以增量方式缩小数据库文件与一次性缩小(执行一个 dbcc 缩小文件)是否会导致更多碎片?谢谢!!

【问题讨论】:

  • 你要收缩哪个数据库?..
  • 这是一个 SQL Server 2008 R2, SP1。
  • 我认为这个问题确实属于DBA网站
  • 没错,是DBA的问题……

标签: sql sql-server-2008 shrink


【解决方案1】:

(这是基于 MS SQL Server。您的里程可能会因其他 RDBMS 而异。)

如果所有其他条件都相同,我怀疑您不会因错误地将缩小过程碎片化而导致更大的碎片化。当文件被收缩时,SQL 可能不得不在内部移动数据,从将被删除的页面到不会被删除的空页面。如果将块 A、B 和 C 移动到 X、Y 和 Z,然后从数据库文件中删除,那么分三步执行会产生与分三步执行一样多的碎片。

我看到的问题是,如果您首先“缩小”块 A,然后在开始处理块 B 之前,加载了更多数据,导致数据库将数据存储在块 D 中——以前是空的并以最终收缩为目标?更糟糕的是,如果添加新数据需要重新创建块 A,那么您必须再次缩小块 A 怎么办?

这是对我只知道外观和感觉的事物进行描述的高级尝试。我怀疑多次收缩可能会产生更多的碎片,如果只是因为收缩会话之间的数据库添加。您的会话越少,您的情况可能就越好。

【讨论】:

  • 有道理...谢谢!
  • 我现在正在对等的测试数据库上运行测试,有趣的是,压缩 100MB 或 1Gb 所需的时间几乎相同......
【解决方案2】:

请参阅下面的链接以获取有关“为什么不应该缩小数据库或不按缩小按钮”的更多详细信息

http://www.sqlskills.com/BLOGS/PAUL/post/Why-you-should-not-shrink-your-data-files.aspx http://sqlinthewild.co.za/index.php/2007/09/08/shrinking-databases/

HTH, \K

【讨论】:

  • 谢谢,我知道,这是你必须这样做的限制情况之一。这是一个几乎完全填满磁盘分区的 1TB 数据库。我没有额外的空间来执行文章中建议的操作 - 移动到新的文件组。
猜你喜欢
  • 1970-01-01
  • 2011-01-12
  • 2020-08-16
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
相关资源
最近更新 更多