我正在尝试尽可能多地压缩 Azure SQL 数据库,以便将它们放入 SQL 弹性池中。
我正在使用此查询,它允许我比较操作前后的未分配空间:
EXEC sp_spaceused @oneresultset = 1
GO
DECLARE @dbName VARCHAR(50)
SELECT @dbName = DB_NAME()
DBCC SHRINKDATABASE(@dbName, TRUNCATEONLY)
GO
EXEC sp_spaceused @oneresultset = 1
GO
我注意到有时未分配的空间实际上是增加而不是减少:
这种事发生过不止一次。我在网上读到,使用SHRINKDATABASE
索引后可能到处都是,但这里似乎并index_size
没有真正改变。旁边的那个unused
只有 50MB,所以这不是问题:
这怎么可能?
以及如何正确SHRINKDATABASE
使用Azure SQL数据库?
你不应该收缩数据库不是一个有效的答复,因为在这种情况下,是的,我必须获得空间。
重新发明轮子是没有意义的。微软为Azure SQL数据库提出了一个开箱即用的解决方案:自动收缩
这就成功了。
如果您想再次重建索引,则没有必要重新发明轮子。微软建议使用 Azure 自动化重建 SQL 数据库索引