我有一个名为Products的表,它有很多列。避免并发删除造成死锁
这是一个用于报告目的的临时表。这些数据将被多个用户请求的同时进行处理,以该表(单独的存储过程进行DML操作此表)
表结构: 创建表产品 (例如唯一标识符, 插入日期时间, COL1,COL2 ,...)
插入的列将填充GETDATE()以在插入数据时生成。而实例列有newid()值。一个用户请求将有一个唯一的ID;可能有百万行。以下是将会同时执行的查询,这会导致死锁。请告诉我
查询1: “设置事务隔离READUNCOMMITTED 删除产品(NOLOCK)P其中例如= 'XXXX-XXX-XXX-XX'”
QUERY2: “设置事务隔离READUNCOMMITTED 删除P从产品(NOLOCK)其中插入< = DATEADD(HH,-10,GETDATE())”
注:非聚簇索引是在实例列创建。
请告诉我我可以在这种情况下使用哪个锁。
注意我无法使用主键,因为当我向表中插入1000万行时(这是一个事务;有20个并发转换),因此它很耗时间。 报告应该尽快生成。我的过程有多个35个DML语句,大约有15个DELETE语句用于其他列的实例列(从表中DElete where instance = @instance和col1 = @ col1)。
看看这个http://stackoverflow.com/questions/9952137/multi-threading-c-sharp-application-with-sql-server-database-calls/10035988#10035988 – Phil 2013-02-25 18:41:30