为什么不能经常地收缩数据库文件

为什么不能经常地收缩数据库文件,第1张

1 收缩所移动的每个数据页都会被写入事务日志

假设你有个数据库(含数据和索引)占用了50G空间, 你想收缩成40G 而收缩过程 就是要把那40G的东西移到数据文件的开始 同时, 为这个收缩, 事务日志需要40G 的空间, 就象自动增长了那些空间(如果你之前没预留那么多空间的话) 然后, 你的日志备份大小就会是40G加上”正常部分的”日志 如果你的数据库恢复模式设成简单的话,不会有这个现象, 因为在收缩过程中的CHECKPOINT会把日志截断的

(此条适用于收缩数据文件) 2 收缩后, 当用户加入数据时, 数据文件又会自动增长

增加数据库的空间是个很”昂贵的” *** 作, 因为数据文件增长很费时间, 并且因为需要很多的资源而影响数据库的性能 同时, 一些 *** 作会被阻塞直到增长的 *** 作结束

(此条适用于收缩数据和日志文件)

SQL Server 2005及以后的版本:

SQL Server 2005加入了一个新特征: 即时初始化(instant file initialization), 就是说建数据文件和增长数据文件会很快, 因为Windows不再把所有数据库文件都写上零了 不过, 即时初始化只适用于数据文件, 而不适用于日志文件 同时, 对数据文件的初始化需要SQL SERVER服务帐号具有WINDOWS的SE_MANAGE_VOLUME_NAME的权限 (这一权限可以用WINDOWS的Perform Volume Maintenance Tasks的安全策略来设定) 在缺省条件下, 这个权限只限于系统管理员 3 在某些情况下, 自动增长不能”赶上”SQL SERVER对空间的需求

这会产生两个错误信息: 1) 如果数据文件空间满了, 则产生错误1105; 2) 如果日志文件满了, 则产生错误9002

(此条适用于收缩数据和日志文件) 4 移动数据页会使你的数据库产生碎片

假设你先重建索引(这个要求数据库有空间), 然后又收缩数据库 实际上, 收缩会把你之前重建的索引又改回去了, 使你的数据库产生碎片 (如果你先收缩, 然后重建索引, 结果就是你的数据库文件会增大)

(此条适用于收缩数据文件) 5 频繁地收缩和增长数据库文件会使底层的文件系统产生碎片, 从而影响数据库性能(此条适用于收缩数据和日志文件)

sqlserver2008日志文件过大的解决办法

1、先分离数据库,到数据库存放目录更改一下日志文件名称。

2、进行附加,会报错。提示找不到日志文件,没有关系,在下方的表格中删除这个日志文件,点击确定,附加成功!

3、sql server 2008 r2 会自动为找不到日志文件的数据库添加一个日志文件,最后在数据库属性页中设置一下数据库的最大限制就可以了。

试试这种方法, 先进行一下测试!这样可以解决日志文件过大的问题!

我的这种方法,没有进行收缩日志文件, 而是重新生成一个日志文件。

收缩数据库

数据库中的每个文件都可以通过删除未使用的页的方法来减小。尽管数据库引擎会有效地重新使用空间,但某个文件多次出现无需原来大小的情况后,收缩文件就变得很有必要了。数据和事务日志文件都可以减小(收缩)。可以成组或单独地手动收缩数据库文件,也可以设置数据库,使其按照指定的间隔自动收缩。

文件始终从末尾开始收缩。例如,如果有个 5 GB 的文件,并且在 DBCC SHRINKFILE 语句中将 target_size 指定为 4 GB,则数据库引擎将从文件的最后一个 1 GB 开始释放尽可能多的空间。如果文件中被释放的部分包含使用过的页,则数据库引擎先将这些页重新放置到文件的保留部分。只能将数据库收缩到没有剩余的可用空间为止。例如,如果某个 5 GB 的数据库有 4 GB 的数据,并且在 DBCC SHRINKFILE 语句中将 target_size 指定为 3 GB,则只能释放 1 GB。

自动数据库收缩

将 AUTO_SHRINK 数据库选项设置为 ON 后,数据库引擎将自动收缩具有可用空间的数据库。此选项可以使用 ALTER DATABASE 语句来进行设置。默认情况下,此选项设置为 OFF。数据库引擎会定期检查每个数据库的空间使用情况。如果某个数据库的 AUTO_SHRINK 选项设置为 ON,则数据库引擎将减少数据库中文件的大小。该活动在后台进行,并且不影响数据库内的用户活动。

本主题介绍如何使用 SQL Server Management Studio 中的对象资源管理器收缩数据库。收缩后的数据库不能小于数据库的最小大小。最小大小是在数据库最初创建时指定的大小,或是上一次使用文件大小更改 *** 作(如 DBCC SHRINKFILE)设置的显式大小。例如,如果数据库最初创建时的大小为 10 MB,后来增长到 100 MB,则该数据库最小只能收缩到 10 MB,即使已经删除数据库的所有数据也是如此。

收缩数据文件通过将数据页从文件末尾移动到更靠近文件开头的未占用的空间来恢复空间。在文件末尾创建足够的可用空间后,可以取消对文件末尾的数据页的分配并将它们返回给文件系统。

注意被移动用来收缩文件的数据可以分布到文件的任何可用位置。这将导致索引碎片并使搜索索引范围的查询变慢。若要消除碎片,请考虑在收缩后重新生成文件的索引。

删除表给数据库缩小空间时:执行如下 *** 作老是存在执行了5,6个小时,还是一直没有执行完成。

在开启自动收缩选项的情况下,SQLServer定期会检查文件使用情况。如果空闲空间大于25%,SQLServer就会自动运行自动收缩数据库文件的动作。

以上就是关于为什么不能经常地收缩数据库文件全部的内容,包括:为什么不能经常地收缩数据库文件、sqlserver2008日志清除后,数据库反映非常慢、数据库收缩等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9415525.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存