在SQL Server中,有什么理由使用DBCC SHRINKDATABASE和' NOTRUNCATE'参数?

时间:2017-05-03 16:53:42

标签: sql-server

根据Microsoft的文档here,它说如果你调用以下命令

DBCC SHRINKDATABASE(N'MyDb', NOTRUNCATE)

因为传递了NOTRUNCATE参数,释放的空间不会返回到操作系统,因此会显示数据库没有缩小/修改。此外,文档声明物理文件大小不会改变。那你为什么要做什么呢?

DBCC SHRINKDATABASE(N'MyDb', 20) --20 is the percentage of free space that you want left in the database file after the database has been shrunk

DBCC SHRINKDATABASE(N'MyDb')

不是缩小数据库以释放内存的全部意义吗?我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

我开始写回复,但说服自己我的论点没有意义。然后我得到了另一个想法,开始写这个,并再次谈论自己。这是第三次了,再次无法合理化NOTRUNCATE

不放弃文件空间的唯一好处是,如果你知道你只是要立即抓住它 - 在这种情况下,为什么要打扰SHRINKDATABASE?坚持重建索引来整理表碎片而不缩小数据库文件(众所周知,可以并且会重新分割表格)并且你得到的结果比收缩产生的结果更好。

所以,不,我不知道你为什么要这样做。