在修改陈年计划任务时碰到一个大数据量提交的问题。
由于大数量走事务提交,导致提交速度极慢6w条数据修改 约莫 3个小时的时间 将数据 commit 到数据库。
有时候还会出现 commit 超时,链接已经被占用的情况。
机智的我 想到 sqlserver 的bulkinsert的妙用。
using (var transaction = BeginTransaction()) { Service.BulkInsert<xxxxx>(data); var (status, ex) = transaction.EndTransaction(); if (!status) { throw new Exception(ex.Message); } }
运行正常了没多久,出现了奇葩的insert失败,原因大致是 id 是bigint 的情况下 提交数据出现了问题,orm用的ef。
真恼人
突然想起国人开发的orm框架SqlSugar,据说性能不错。
var db = SqlSugarRepository.DbClient(SqlSugar.DbType.SqlServer, "DishWasherEntitiesAsp"); try { //开启事务 await db.BeginTranAsync(); //快速提交 await db.Fastest<xxxx>().BulkCopyAsync(data); //正常提交 db.Insertable<xxxx>(data).ExecuteCommand() // 如果所有操作都成功,提交事务 await Db_Edm.CommitTranAsync(); }
意外的非常不错,用Fastest 的方式提交,2秒钟就能解决提交问题。用正常的提交方式Insertable提交,原先6w的数据20分钟内也能完成数据的提交。
给国人大大点赞
文章评论