我有一个 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 …