azure - 释放azure sql数据库中的内存

标签 azure azure-sql-database

我在 Azure 中有一个数据库,当前有 750GB 的数据。 为了降低运行数据库的成本,我希望数据库尽可能小,尤其是在 1TB 以下。

表我们称之为“BigTable”,它占据了95%的存储内存,所占份额最大。每天都会有更多的数据存储在这个数据库中,这样的情况将持续四年。超过两年的数据将不再需要。这就是我已经做的:

  1. 我设置了具有时间点还原功能的第二个数据库“test_database”,使用“导出”功能对数据库进行了备份,并将其保存在 Blob 存储中。效果很好。

  2. 我通过运行以下语句,使用工具 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/

    相关文章:

    azure - 运行 noteboot 时获取 Azure Synapse 管道运行 ID

    azure - 找不到获取 azkeyvaultaccesspolicy

    amazon-web-services - 如何将 Azure Repo 与 AWS CodeCommit 集成

    azure - Aks ImagePullbackoff 未在待处理 Pods 警报中收到警报

    sql-server - 迁移到 SQL Azure 进程/可用性组

    c# - 即使我们在密码前留有空格,Azure SQL 数据库也会连接

    sql-server - 更新 Windows 后 SqlClient 错误 - "The incoming tabular data stream (TDS) remote procedure call > (RPC) protocol stream is incorrect"

    sql-server - 如何检查 Azure SQL Server 中是否启用了即时文件初始化

    azure-sql-database - SQL Azure 将数据库导出到自己的服务器

    git - Azure DevOps - 条件/表达式允许我跳过阶段内的任务