使用SQL Server

时间:2017-07-04 07:48:04

标签: sql-server database

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

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

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

在我看来,如果我们能够摆脱这些客户数据,缩小文件并在未来几年内保持安全,再次达到这个磁盘使用水平,那就太棒了。

我看到许多线程警告性能因索引碎片而降低。

那么,我们怎样才能删除这些客户的数据(存储在其他客户使用的相同表格中,以及其他方面的客户ID索引),而不会造成任何明显的弊端?

这些步骤是可行的,还是有更好的方法?

  1. 删除此客户的数据
  2. DBCC SHRINKDATABASE(数据库,30)
  3. ALTER DATABASE数据库SET RECOVERY SIMPLE
  4. DBCC SHRINKFILE(database_Log,50)
  5. ALTER DATABASE数据库SET RECOVERY FULL
  6. DBCC INDEXDEFRAG

1 个答案:

答案 0 :(得分:0)

只需要第1步。删除数据将释放数据库中的空间,可以重新用于新数据。您还应该执行ALTER INDEX...REORGANIZE or ALTER INDEX...REORGANIZE 1来压缩索引并在索引中均匀分配可用空间。

修改

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

  1. ALTER DATABASE ... SET RECOVERY SIMPLE(或BULK_LOGGED)
  2. 删除此客户的数据
  3. DBCC SHRINKFILE(database_Data,30) - 为每个文件重复所需的大小
  4. DBCC SHRINKFILE(database_Log,50)
  5. REORGANIZE(或REBUILD)索引
  6. ALTER DATABASE ... SET RECOVERY FULL
  7. 备份数据库...