【问题标题】:MSSQL Server 2008 Standard Edition archive large 800GB tableMSSQL Server 2008 标准版归档800GB大表
【发布时间】:2016-10-06 05:58:13
【问题描述】:

我有一张自 2011 年以来每天插入数百万条记录的表。仅该表的数据大小就增长了 800GB 以上。对我来说只有最近 3 个月的数据被频繁查询,而对于较旧的数据,查询很少需要完成,可以在离线模式下完成。

问题 1:该表有一个日期列,我想将 3 个月之前的所有数据存档在文件中,以便我可以将它们移动到另一个存储中。那么什么是满足要求的最佳方法,我不想将数据保留在备份 mssql 服务器上。

A.创建 SSIS 包以将历史数据转储到 csv 中,并按月份或日期名称压缩文件。当需要时,SSIS 包可以读取文件并加载到数据库中。这项工作将每天或每周安排一次。 B. 编写一些 JAVA 或 python 代码来完成同样的工作。 C. 还有其他选择吗?

问题 2:一次只执行一个日期的查询。在查询此表时,会与其他一些元表连接。那么我应该在我的表中添加分区以获得更快的查询性能吗?

【问题讨论】:

  • 如果您有足够的 SQL Server 版本,请考虑使用表分区。你有什么版本(Express、Standard、Enterprise)
  • 是标准版。

标签: sql-server sql-server-2008 ssis


【解决方案1】:

我可能会做什么:

  • 将要归档的数据移动到同一服务器上的单独数据库中。使用 SSIS 包或存储过程。
  • 重命名原始表,假设您不想破坏任何依赖关系并希望能够立即使用存档数据。
  • 创建一个名称与原始表完全相同的视图,从重命名的表中选择所有数据
  • 当需要存档数据时,更改视图以合并所有存档数据,如下所示:

.

ALTER VIEW [OriginalTableName] AS
SELECT * FROM ActiveDate
UNION ALL
SELECT * FROM ArchiveDB..ArchivedData

【讨论】:

  • 如果我在其他数据库上移动硬盘已满。如果我转储到 csv 中,我可以在其他机器上移动 csv 并在需要时拉取。
猜你喜欢
  • 1970-01-01
  • 2012-08-31
  • 2017-04-16
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多