小编Gre*_*Gum的帖子

如何回收 Sql Server Azure 上的空间

我有一个 Azure Sql Server 数据库(在云中,而不是在 VM 上)(不是托管实例),当前分配有 270 GB 的空间。

然而,实际使用的空间为 27%(81 个演出)。

我想回收该空间,就像在 Azure 上一样,他们按分配的空间量向您收费。大量未使用空间是由于删除 varbinary(Max) 列造成的。该列每行最多包含 40 兆数据。

我检查了文档,它说要运行:

DBCC SHRINKDATABASE ([JGWeiss_Prod_V2])

或者

DBCC CLEANTABLE ([JGWeiss_Prod_V2],'dbo.Attachments', 0)

我执行了第一个并让它运行了 12 小时,然后第二个又运行了 12 小时,但它导致了零空间被回收。我最终取消了它们,没有让它们运行完成。

我还尝试过“TruncateOnly”选项,但似乎没有效果。

难道我做错了什么?或者我只需要等待,比如让其中之一运行几天?

我理解不定期执行此类命令的概念,但我想减少 Azure 费用。

我读过的另一个选项是创建一个 bakpak 文件,然后恢复整个数据库,然后删除原始数据库。

建议表示赞赏。

更新 DBCC CLEANTABLE终于运行完成,但我分配的空间仍然显示相同。

DatabaseDataSpaceAllocatedInMB  DatabaseDataSpaceAllocatedUnusedInMB
270941.312500                   188090.187500
Run Code Online (Sandbox Code Playgroud)

然后我跑了DBCC SHRINKDATABASE ([JGWeiss_Prod_V2])

几秒钟之内就完成了。

数据库ID 文件编号 目前的规模 最小尺寸 已用页面 预计页数
11 2 90624 1024 90624 1024

我也尝试过DBCC SHRINKDATABASE ([JGWeiss_Prod_V2], TRUNCATEONLY)

但是,分配的空间量仍然没有变化。

我还需要做些什么吗?

更新2

奇怪的是,即使没有运行 DBCC 命令,数据库的实际使用空间仍在不断缩小。下降至16.95%。减少需要花费很多时间,但似乎正在运行某些东西,继续减少实际使用的空间。但分配的空间保持不变。所以现在,我只想等待,直到已用空间不再减少。

更新 3 …

sql-server shrink azure

4
推荐指数
1
解决办法
593
查看次数

标签 统计

azure ×1

shrink ×1

sql-server ×1