我必须缩小数据库的大概大小。1 to减少到700 Gb左右(这使得200+ Gb可以在不进行扩展的情况下增长)。我有一个脚本,它将按设定的增量(例如,1 1GB)循环和收缩数据库。如果您必须在任何时候中止,这是非常有用的,因为进度不会丢失,整个收缩操作可能会运行4-5天。问题是,数据库文件的增量收缩与单次收缩(执行一个dbcc收缩文件)是否会导致更多的碎片?谢谢!!
发布于 2012-05-10 22:18:07
(这是基于MS SQL Server的。您的里程数可能因其他RDBMSes而异。)
如果其他条件相同,我怀疑你不会因为分割你的收缩过程而导致更大的碎片。当文件收缩时,SQL可能必须在内部移动数据,从要删除的页移动到不会删除的空页。如果将块A、B和C移动到X、Y和Z,然后从数据库文件中删除,那么分三步执行可能会产生与分三步执行一样多的碎片。
我看到的问题是,如果您首先“缩小”块A,在开始处理块B之前,加载了更多的数据,导致数据库将数据存储在块D中--这是一个以前是空的部分,最终会缩小?更糟糕的是,如果添加新数据需要重新创建区块A,然后您必须重新缩小区块A,那该怎么办?
这是一次高层次的尝试,试图描述一些我只知道其外观和感觉的东西。我怀疑多个收缩可能会产生更多的碎片,如果仅仅是因为在收缩会话之间添加了数据库。你拥有的会话越少,你可能会过得越好。
发布于 2012-05-10 22:54:22
请参考下面的链接,了解有关“为什么不应该收缩数据库或不按收缩按钮”的详细信息。
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
https://stackoverflow.com/questions/10535697
复制相似问题