0

如果我使用 ADO.Net 对同一个表同时进行批量插入,使用两个具有单独连接的不同进程,每个进程都有一个隔离级别为“ReadCommitted”的事务,该表具有:

  • RowId:bigint 身份
  • FooId:uniqueidentifier PK Non Clustered(在 bulkinsert 之前在代码中预先分配)

关于同时插入,最好是:

  • a) 在 RowId 上放置一个带有聚集索引和唯一键约束索引的 PK,非聚集在 FooId
  • b) 放一个唯一的键约束索引,非聚集在 RowId

还有其他提示吗?

4

1 回答 1

3

无论您选择哪一个,您都将拥有一个以 RowId 身份顺序排列的索引。这两个操作都将尝试在同一区域(索引结束)中插入行,因此无法实现最低限度的日志记录(即尽可能快的加载)。我强烈建议您阅读数据加载性能指南

显而易见的问题是为什么要两个并发的批量插入操作?他们更有可能彼此放慢速度,而不是加快速度。在集群+索引场景中实现并行快速加载流是相当困难的。您是否尝试过单流和 TF610?如果您能够使用单个流实现最少记录的批量插入,并使用足够大的批处理大小,我希望它比两个完全记录的并行流更快。

于 2012-05-21T23:30:38.747 回答