Print

【MVS】SQLServer数据库的自动收缩特性介绍

问题描述

SQLServer数据库的自动收缩特性介绍

解决方法

AUTO_SHRINK(自动收缩)

1)特性简介

  • 含义:SQL Server 会在后台周期性尝试回收数据库文件中的空闲空间,自动对数据文件/日志文件执行收缩相关动作。
  • 影响:通常会导致索引碎片增加、额外IO/CPU、增长-收缩抖动,长期更易造成性能问题。

2)从什么版本开始支持

  • 早期版本即已支持(同样属于历史悠久的数据库选项,至少从 SQL Server 2000 起就常见)。

3)如何查询当前状态

 
sql
复制
SELECT name, is_auto_shrink_on FROM sys.databases WHERE name = N'YourDB';

或:

 
sql
复制
SELECT DATABASEPROPERTYEX(N'YourDB','IsAutoShrink') AS IsAutoShrink;

4)什么情况考虑开启

  • 通常不建议长期开启
  • 只在极少数场景:例如非关键、数据量变化剧烈且确实需要自动回收空间、并且可接受性能波动的环境(仍更建议用人工方案替代)。

5)什么情况建议关闭(常规生产建议关闭)

  • 绝大多数生产库:OLTP/报表/批处理等。
  • 任何对性能、稳定性、索引健康有要求的系统。
  • 已经存在频繁自动增长(AUTO_GROW)导致抖动的库(自动收缩会加剧)。

6)如何设置

 
sql
复制
ALTER DATABASE [YourDB] SET AUTO_SHRINK OFF; -- 或 ON