小编xer*_*him的帖子

旧数据归档

由于我们的数据库变得太大,我们目前遇到了一些性能问题。有过去 10 年存储的数据,我看不出为什么必须将 2 年以上的数据与新数据存储在相同的表中。

现在,由于我在管理数据库方面没有非常丰富的经验,我正在寻找存档旧数据的最佳方法。


信息

  • 数据库中总共有大约 310'000'000 条记录。

  • 数据库需要 250 GB 的硬盘空间。

  • 服务器版本是 SQL Server 2008,兼容级别为 SQL Server 2005 (90),但我们计划很快升级到 SQL Server 2012

我想过两种可能:

新建数据库

创建类似于生产服务器上的数据库,并将所有旧数据插入新数据库中。

  • 缺点:由于我们的环境中不允许链接服务器,如果需要的话,很难加入旧数据

历史架构

使用与生产数据库中相同的表创建新模式 fe [hist]。将所有旧数据插入新模式中的这些新表中。

  • 优点:容易加入,如果将来需要旧数据


  • 您是否更喜欢其中一种解决方案?
    • 为什么?
  • 有没有更好的可能性?
  • 是否存在可以轻松完成此任务的现有工具?
  • 还有其他想法吗?

提前致谢

编辑

补充问题:

新创建的存档表是否也需要主键/外键?

或者他们应该只有列但没有键/约束?

sql-server migration

29
推荐指数
3
解决办法
5万
查看次数

为什么会出现 async_network_io 等待类型?

上周我们的数据库发生了一些奇怪的事情。突然之间,应用程序阻止了我们无法保存新实体等的用户。在查看 SQL Server(2008 兼容模式 2005)的活动监视器后,我看到以下三个条目:

async_network_io 等待类型

一段时间后,用户出现连接超时。当我杀死进程64时,他们可以再次正常保存。

问题是他们在块期间尝试保存的实体被多次插入数据库(最多 3 次),即使有代码可以防止这种情况发生(数字列必须是唯一的但没有约束...检查发生在代码中)。

我们使用实体框架 6.0。

  • 你们中有人知道这些 ASYNC_NETWORK_IO 等待类型发生的原因和时间以及如何避免它们吗?
  • 它们究竟是什么意思?

sql-server-2008 sql-server entity-framework

12
推荐指数
2
解决办法
2万
查看次数