Answers:
(我最初问的是一个常规问题,但后来找到了正确的方法-感谢BrentO)
没有永不。
我现在在ServerFault上遇到过几次,并希望通过一些很好的建议来吸引大量读者。如果人们不喜欢这种处理方式,请拒绝投票,我会很乐意将其删除。
自动收缩是已启用的非常常见的数据库设置。似乎是个好主意-从数据库中删除多余的空间。那里有很多“非自愿DBA”(例如TFS,SharePoint,BizTalk或只是常规的旧SQL Server),他们可能不知道自动收缩肯定是有害的。
在Microsoft期间,我曾经拥有SQL Server存储引擎并试图删除自动收缩功能,但是为了向后兼容,它必须保留。
为什么自动收缩如此糟糕?
数据库很可能会再次增长,那么为什么要收缩呢?
不久前,我写了一篇博客文章,其中包含一个示例SQL脚本,该脚本显示了它引起的问题并进行了更详细的说明。请参阅自动收缩–将其关闭!(没有广告或垃圾邮件出现在我的博客上)。不要将其与收缩日志文件混淆,有时这是有用且必要的。
所以请您帮忙-查看数据库设置并关闭自动收缩功能。出于完全相同的原因,您也不应该缩减维护计划。把这个词传播给你的同事。
编辑:我应该添加这个,第二个答案提醒-常见的误解是中断收缩操作会导致损坏。不,不会。我曾经在SQL Server中拥有收缩代码-如果被中断,它会回滚当前正在执行的页面移动。
希望这可以帮助!
保罗当然是对的。
查看所有数据库及其自动收缩设置。如果您有很多数据库,一个数据库就会潜入。
sp_msforeachdb @command1 = 'Select ''[?]'',DATABASEPROPERTYEX(''?'',''IsAutoShrink'')'
这是在dmv的某个地方吗?...我想知道。
这不是“不安全的”-不会损坏任何东西。
但是,不建议在生产环境中使用该数据库,因为在这些环境中,数据库可能决定关闭并在进行大量请求之前就开始进行昂贵的重新安排工作,从而使这些请求需要更长的时间才能得到服务。使用调度收缩操作以及其他维护操作(例如备份)(实际上,在备份之后-这样会从事务日志中获取更多收益)会更好。或者,除非出现增长问题,否则根本不会收缩-您始终可以设置一个监视器,让您知道未使用的已分配空间何时超过某个比率或固定大小。
对于所有MSSQL版本中除Express之外的所有数据库,默认情况下,IIRC该选项处于关闭状态。
TechNet上有一份白皮书,详细解释了SQL维护。
另请查看此视频教程。...
观看Paul Randal演示收缩和自动收缩如何导致数据库严重碎片问题 http://wtv.watchtechvideos.com/topic194.html