Sql server 使用SQL Server进行一次性数据库收缩

Sql server 使用SQL Server进行一次性数据库收缩,sql-server,database,Sql Server,Database,在删除大量过时数据时,我们如何减少数据库文件的大小 我们有一个应用程序,它收集了多年的数据。现在一个客户已经离开了项目,他们的数据可以被删除。仅此客户就占数据库中数据的75% 磁盘使用率非常高,并且运行在定价非常高的虚拟化云服务中。更换其他提供商不是一种选择,购买更多磁盘也不受欢迎,因为实际上我们使用的数据减少了75% 在我看来,如果我们能够摆脱这些客户数据,缩小文件,并在未来几年内安全地再次达到这种磁盘使用率水平,那将是一件非常棒的事情 我看到许多线程警告由于索引碎片而导致性能下降 那么,我们

在删除大量过时数据时,我们如何减少数据库文件的大小

我们有一个应用程序,它收集了多年的数据。现在一个客户已经离开了项目,他们的数据可以被删除。仅此客户就占数据库中数据的75%

磁盘使用率非常高,并且运行在定价非常高的虚拟化云服务中。更换其他提供商不是一种选择,购买更多磁盘也不受欢迎,因为实际上我们使用的数据减少了75%

在我看来,如果我们能够摆脱这些客户数据,缩小文件,并在未来几年内安全地再次达到这种磁盘使用率水平,那将是一件非常棒的事情

我看到许多线程警告由于索引碎片而导致性能下降

那么,我们如何删除该客户的数据(存储在其他客户使用的相同表中,根据客户id等进行索引),而不造成任何明显的缺陷呢

这些步骤是正确的,还是有更好的方法

  • 删除此客户的数据
  • DBCC收缩数据库(数据库,30)
  • ALTER数据库集恢复简单
  • DBCC收缩文件(数据库日志,50)
  • ALTER数据库集恢复已满
  • DBCC INDEXDEFRAG

  • 只需要步骤1。删除数据将释放数据库中的空间,这些空间可用于新数据。您还应该执行压缩索引,并在整个索引中均匀分配可用空间

    编辑:

    由于您的云提供商对使用的磁盘空间收取费用,因此您需要压缩文件以将空间释放回操作系统,并避免产生费用。下面是对您建议的步骤的一些调整,可以根据您的RPO要求进行定制

  • 改变数据库。。。将恢复设置为简单(或大容量日志)
  • 删除此客户的数据
  • DBCC SHRINKFILE(数据库_数据,30)--对每个文件重复,直到达到所需的大小
  • DBCC收缩文件(数据库日志,50)
  • 重新组织(或重建)索引
  • 改变数据库。。。设置恢复已满
  • 备份数据库

  • 但这会缩小文件大小吗?也许我完全错了,但我相信删除数据会在文件中产生空间,而不是释放实际磁盘空间?对我们来说,释放磁盘空间是一个主要的兴趣,因为今天我们有90%以上的磁盘使用率。不,它不会缩小物理文件大小,但没有必要。文件中将有可用空间用于新数据。好的,很抱歉我不清楚。目的是恢复磁盘空间。使用75%数据的客户永远都不在了,因此再也不会有这么多数据了,云提供商每月都要为使用过的磁盘支付费用。降低磁盘使用率很重要。