加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 我每天有大约30M行在SQL Server中插入更新我的选择是什么

发布时间:2020-12-16 01:52:25 所属栏目:百科 来源:网络整理
导读:我有大约30M行每天在SQL Server中插入更新我有哪些选择? 如果我使用SqlBulkCopy,它是否处理不插入已存在的数据? 在我的场景中,我需要能够使用相同的数据一遍又一遍地运行它,而无需复制数据. 目前,我有一个带有update语句的存储过程和一个从DataTable读取数
我有大约30M行每天在SQL Server中插入更新我有哪些选择?

如果我使用SqlBulkCopy,它是否处理不插入已存在的数据?

在我的场景中,我需要能够使用相同的数据一遍又一遍地运行它,而无需复制数据.

目前,我有一个带有update语句的存储过程和一个从DataTable读取数据的insert语句.

我应该寻找什么来获得更好的表现?

解决方法

执行此类操作的常用方法是维护对其没有约束的永久工作表(或多个表).通常这些可能存在于同一服务器上的单独工作数据库中.

要加载数据,请清空工作表,通过BCP /批量复制生成数据.加载数据后,您需要进行任何清理和/或转换以准备新加载的数据.完成后,作为最后一步,通过执行实现旧数据和新数据之间的增量所需的更新/删除/插入操作,或者通过简单地截断实际表并重新加载它们,将数据迁移到实际表.

另一个选择,如果你有类似于稳定的数据流入的东西,可能是设置一个守护进程来监视数据的到达,然后进行插入.例如,如果您的数据是平面文件,则通过FTP等将其放入目录中,守护程序可以监视目录中的更改并在内容到达时执行必要的工作(如上所述).

要考虑的一件事是,如果这是一个生产系统,那么执行大量的插入/删除/更新语句可能会在事务处于运行状态时导致阻塞.此外,一个巨大的交易失败和回滚有其自身的缺点:

>回滚可能需要很长时间才能处理.
>在回滚期间保持锁定,因此在数据库中阻塞和其他争用的机会更多.
>最糟糕的是,在所有这一切发生之后,你没有实现前进动作,可以这么说:你需要花费大量的时间和精力,而且你已经回到了起步的地方.

因此,根据您的具体情况,您可能最好以较小批量进行插入/更新/删除,以确保您实现前进.超过24小时的3000万行是c.每秒350.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读