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. 频繁地收缩和增长数据库文件会使底层的文件系统产生碎片, 从而影响数据库性能.
(此条适用于收缩数据和日志文件)
假设你有个数据库(含数据和索引)占用了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. 频繁地收缩和增长数据库文件会使底层的文件系统产生碎片, 从而影响数据库性能.
(此条适用于收缩数据和日志文件)