知
【MVS】SQLServer数据库的自动收缩特性介绍
问题描述
解决方法
AUTO_SHRINK(自动收缩)
1)特性简介
- 含义:SQL Server 会在后台周期性尝试回收数据库文件中的空闲空间,自动对数据文件/日志文件执行收缩相关动作。
- 影响:通常会导致索引碎片增加、额外IO/CPU、增长-收缩抖动,长期更易造成性能问题。
2)从什么版本开始支持
- 早期版本即已支持(同样属于历史悠久的数据库选项,至少从 SQL Server 2000 起就常见)。
3)如何查询当前状态
SELECT name, is_auto_shrink_on
FROM sys.databases
WHERE name = N'YourDB';
或:
SELECT DATABASEPROPERTYEX(N'YourDB','IsAutoShrink') AS IsAutoShrink;
4)什么情况考虑开启
- 通常不建议长期开启。
- 只在极少数场景:例如非关键、数据量变化剧烈且确实需要自动回收空间、并且可接受性能波动的环境(仍更建议用人工方案替代)。
5)什么情况建议关闭(常规生产建议关闭)
- 绝大多数生产库:OLTP/报表/批处理等。
- 任何对性能、稳定性、索引健康有要求的系统。
- 已经存在频繁自动增长(AUTO_GROW)导致抖动的库(自动收缩会加剧)。
6)如何设置
ALTER DATABASE [YourDB] SET AUTO_SHRINK OFF; -- 或 ON