使用.Net应用程序对SQL Server 2008数据库进行批量更新 - 性能最佳的方法

时间:2012-03-27 21:50:22

标签: .net sql-server database

我们有一个应用程序会在SQL Server 2000数据库中对表(表1)发布大量更改。

每个Insert / Update / Delete触发该表上的触发器,并将更改的详细信息发布到另一个表(表2)中,包括表1的唯一键。

然后,在特定的时间间隔,.Net应用程序轮询表2,以查看是否有任何更新需要传输到SQL Server 2008数据库中表1的相同表 - 表3。 该例程采用“前10000行”更改并将它们单独应用于表3,重复该过程直到没有剩余。每10,000个处理大约需要一分钟,包括表2的批量更新以指示完成的数据传输。

使用唯一键执行对表3的每次更新,并且表上的索引是合理的。

一旦更新完成到表3,表2就会更新,以显示该事务已应用于SQL Server 2008数据库。

表1有时会被40,000个更新命中,这些似乎工作正常,但SQl Server 2008数据库在更新记录时会受到影响。

将更新发布到表3的最佳性能是什么?

我虽然服务代理可以完成这项工作,但是我如何在.Net应用程序中创建XML消息并将其放在队列中以供服务代理应用 - 并且不会导致同样的问题 - 同样由不同的过程执行的工作。

1 个答案:

答案 0 :(得分:0)

使用服务代理不会神奇地使您的工作负载更快。为什么你会这么想?

执行批量DML的最有效方法通常是在每个查询中以更大批量执行它。这允许优化器调整查询计划以获得它将接收的确切行数。如果您将每个更新作为单个查询执行,则优化程序无法跨查询进行优化。

因此,我建议您尝试将所有更新都放入单个合并语句中。还包括此单合并查询中的插入和删除。