后台频繁创建事务修改数据库,导致频繁锁表
在后台多个线程频繁建立事务修改数据,经常造成数据库锁表,导致其它线程无法读取或修改表中数据而报错,例如:
线程1:从a表中读取一批数据到dataset中,循环处理每一条数据
foreach(datarow row in dataset.tables[0].Rows){
//对每一条数据进行处理
....
//建立事务
修改b表数据
修改其它表中相关数据
//提交事务
}
线程2:从b表中读取一批数据到dataset中,循环处理每一条数据
foreach(datarow row in dataset.tables[0].Rows){
//对每一条数据进行处理
....
//建立事务
修改b表数据
修改其它表中的相关数据
//提交事务
}
在后台有一个定时器,每隔1分钟执行一次线程1,每隔1分钟执行一次线程2。由于两个线程都频繁创建事务修改b表,b表经常被锁,使得其中某一线程无法读取或者执行事务失败。
想把所有的update拼接在一起(用分号分隔),批量执行,不用频繁建立事务,但是经常由于字段太多,sql太长不能执行,
或者由于其中一条执行失败,这一批数据都要回滚,下一次又要从头执行,重新处理这一批数据。
所以想请问各位大侠,有什么办法可以尽可能减小锁表的频率,是否有别的方式可以进行批量处理??