我们有一个在 SQL Server 2016 中运行的批量导入任务,它导入了超过 500 万行。任务本身使用第三方服务在云端进行配置。奇怪的是,正在导入的新数据被附加到数据文件(.mdf)中,并且没有使用已经分配的空白空间。表被截断并重新加载。所有表都定义了聚集索引。我们甚至使用了截断所有相关表的预处理任务 -> 重新组织所有相关表 -> DBCC updateusage,但无济于事。我们甚至将数据文件的大小增加了一倍,但我们仍然看到一些自动增长事件。尽管此类事件减少了 80%。导入后,我们剩下 70% 的数据文件是空的。我是否遗漏了 SQL Server 2016 中的某些内容或任何特定设置/更改,这就是我们遇到这种行为的原因?谢谢。
小批量的批量插入可能会导致未使用的保留空间显着增加,因为根据Tiger Team 帖子,每个批次都为快速插入分配了完整的扩展区。我从您的评论中看到批处理大小只有 200 行,这解释了大量未使用空间的主要原因,尽管我希望在增长文件之前重用现有的未分配范围(不要与未使用空间混淆) .
如果您无法控制最佳批量大小(例如第三方应用程序),您可以打开跟踪标志 692以禁用快速插入并减少空间需求,但会牺牲性能。