如何为 SQL Server 可用性组中的数据库回收文件流数据文件中的空间

sql*_*wan 4 backup filestream availability-groups sql-server-2016

我有一个 SQL 2016 Ent。具有 3 个节点的 AG 版。我们在 AG 中有一个包含 5 个文件流表的数据库。每个表都在它自己的文件流数据文件中。今天我修复了一个错误,即通过重建索引将所有文件保存到一个文件流数据文件中。

在 dev 中,我们没有 AG,数据库处于简单恢复中。空间被收回了。之前和之后看起来像这样:

在此处输入图片说明

当我在 AG 中运行相同的代码时,所有节点都如下所示: 在此处输入图片说明

文件已移至正确的文件流数据文件,但未从原始数据文件中恢复空间。

一开始我还以为是车库收藏,看了Paul Randal的博文。我缩小了日志文件,然后创建了一个垃圾表,通过显式转换添加了大量行,运行了日志备份和检查点,所有这些都在主节点上。日志文件确实增长了,之前活动的 VLF 被标记为不活动。

更复杂的是,备份是辅助节点上的完全复制\日志备份。

在这种情况下回收空间的正确方法是什么?

编辑:按照安迪在他博客中的步骤后,空间被收回。每个 AG 节点看起来像:

reclaimed_filestream_file_space

AMt*_*two 5

我相信您遇到相关的bug一个悦目不同的情景描述在这里,并正式上报这里

当删除文件流表(或在您的情况下重建和移动)时,如果数据库位于 AG 中,垃圾收集将不会清理。

要解决该错误,您需要:

  • 从 AG 中删除数据库
  • 进行日志备份
  • 手动运行垃圾收集
  • 将日志备份应用到次要副本 WITH NORECOVERY
  • 将数据库重新加入 AG(通过应用日志备份,您可以避免完全重新同步)