我在 Azure 中有一个数据库,当前有 750GB 的数据。 为了降低运行数据库的成本,我希望数据库尽可能小,尤其是在 1TB 以下。
表我们称之为“BigTable”,它占据了95%的存储内存,所占份额最大。每天都会有更多的数据存储在这个数据库中,这样的情况将持续四年。超过两年的数据将不再需要。这就是我已经做的:
我设置了具有时间点还原功能的第二个数据库“test_database”,使用“导出”功能对数据库进行了备份,并将其保存在 Blob 存储中。效果很好。
我通过运行以下语句,使用工具 SQL Server Management Studio (SSMS) 删除了不必要的数据:
Delete
From BigTable
Where Year(Date) < 2020
该工具表示删除了 3.07 亿个数据集,但数据库变得更大,约为 870GB。我想说这是因为删除将在日志文件中获取一个条目,因此它会变得更大。
- 之后我在 SSMS 中执行了这条语句:
DBCC SHRINKDATABASE (0)
实际结果是 azure 门户的肖像。 已用空间和已分配空间均超过 750GB
所以我的问题是:为什么数据库没有变小?我该怎么做才能真正缩小分配空间的大小?
几天后注意: 一个周末后,我再次检查了 azure 门户,它更新了它的值。 现在它说: 已用空间:486.86GB 分配空间:826.62GB 我想知道那是从哪里来的。之后我再次执行收缩命令。这次成功了。也许这是由于 azure 门户的延迟造成的,但我不能肯定地说。
最佳答案
经过多次尝试和错误,这是我发现的:
删除语句何时生效,即 Azure 门户显示较少使用的存储取决于为“时间点恢复 (PITR)”设置的时间。
如果 PITR 设置为 7 天,它会将已删除的数据保留 7 天,并且仅在 7 天后,已用存储空间才会发生明显变化。因此,为了更快地查看删除语句的结果,您必须将 PITR 设置为 1 天,这也是您可以设置的最小值。
只有在删除生效后,执行“收缩命令”才有用,因为只有这样,才有真正可以收缩的东西。
关于azure - 释放azure sql数据库中的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72247900/