管理包含超过 1 TB 数据的 SQL Server 数据库

SQL*_*ert 6 sql-server archive vldb sql-server-2014

最近我们有一个超过 1 TB 的审计数据库,由于我们有存储问题,管理层正在寻找选择。

我的建议是在每年年底我们进行备份并截断所有表,以保持数据库的可管理性。

拥有存档数据库不会有好处,因为它会再次消耗相同的空间。

我想对我可以向管理层提出的选项提出专家意见,即每年分配更多空间或截断整个数据库。

Tru*_*ubs 8

  1. 获得更多空间。如果您有保留这么多数据的业务要求,他们必须拿出资金。
  2. 为最大的表(和索引)打开页面压缩(测试测试测试!),日志数据压缩得非常好,但压缩该数量的数据需要一些时间。
  3. 见第 1 点


Joh*_*ner 5

我正在添加上面Trubs 的 回答,你应该赞成,因为(她)他在正确的轨道上,但我也在这里添加了更多选项:

  1. 添加更多空间(如上所述)
  2. 如果您在任何索引上每页都有大量的平均可用空间,您应该运行¹ 语句(如果您有足够的可用空间,我建议改为执行操作,但由于我们正在谈论空间不足,这操作可能无法在较大的表上完成)。要找到每页的平均可用空间量,您需要使用或模式运行dmv,这将需要一段时间。ALTER INDEXREORGREBUILDsys.dm_db_index_physical_statsSAMPLEDDETAILED
  3. 清除一些数据。您可以批量删除以帮助减少过多的日志记录和锁定,或者更好的长期解决方案是利用表和索引分区² 并切换/截断最后一个分区以更快地清除数据。
  4. 启用页面或行压缩²(如上所述)。您可以使用sp_estimate_data_compression_savings存储过程查看估计的空间节省情况。
  5. 升级到 SQL 2016 或更高版本后,您可以将表转换为使用聚集列存储索引²。这些可能会为您提供可用的最佳压缩率,并且也可能会改善针对这些表的查询执行时间。值得注意的是,我不建议您使用 SQL 2014(或 SQL 2012)来执行此操作,因为我认为此功能在测试版中一直存在,直到 SQL 2016 最终以适当的功能发布。
  6. 利用 Azure Stretch Database,这是一种混合解决方案,可让您存储在云中不常访问的数据。这将花费金钱并且至少需要使用 SQL 2016,但由于我们正在讨论未来版本中的功能,我认为它也应该被列出。

¹ - 仅适用于企业版

² - 适用于从 SQL Server 2016 SP1 开始的所有 SQL Server 版本。这是此 Service Pack 之前的企业专用功能。