Does performance of a database (SQL Server 2005) decrease if I shrink it?
What exactly happen to the mdf and ldf files when shrink is applied (Internals???)
Does performance of a database (SQL Server 2005) decrease if I shrink it?
What exactly happen to the mdf and ldf files when shrink is applied (Internals???)
收缩数据库时,它会消耗资源来收缩数据库。遇到问题的地方是数据库需要再次增长,并且假设您设置了自动增长,它将消耗更多资源来自动增长。不断的自动收缩(或作为维护计划的一部分收缩)将导致物理磁盘碎片。
如果您启用了自动增长并将其设置为默认值 1MB,那么持续自动增长将消耗大量资源。
最佳实践是将您的数据库调整为合适的大小,即预期的初始大小加上一段时期内的预期增长(月、年、您认为合适的任何时期)。您不应使用自动收缩或将收缩用作维护程序的一部分。
您还应该将自动增长设置为 MB(不是数据库的百分比,因为自动增长时需要先计算百分比,然后再增长数据库)。您还应该将自动增长设置为合理的数量,以确保它不会每 10 分钟增长一次,并尝试以每天 1 或 2 次增长为目标。
您还应该查看为您的 SQL Server 设置即时初始化。
祝你好运,
马特
重要的是要了解,当您缩小数据库时,页面会重新排列。数据文件末尾的页面被移动到文件开头的开放空间,而不考虑碎片。
聚集索引确定表中数据的物理顺序。因此,假设您刚刚创建了一个聚集索引,它会在物理上重新排序该表中的数据。那么,当你执行一个shrink命令时,在创建聚集索引的过程中刚刚整理好的数据现在可能会出现乱序,这会影响SQL对其进行有效利用的能力。
因此,任何时候执行收缩操作都有可能影响所有后续查询的性能。但是,如果您在收缩后重新执行聚集索引/主键,则有助于对收缩操作期间可能引入的大部分碎片进行碎片整理。如果性能很关键,但您也被迫定期进行收缩,那么在理想情况下,您希望在每次收缩操作后重新执行索引。
Yes it could affect performance a bit. When a database is in operation it doesn't care to much about its diskspace usage, more about efficient data retrieval/persistance.