不能使用并行插入操作插入行
公司erp导入数据客户端软件,在解析完报表数据后,为了提高数据入库效率,程序参用线程池进行并发插入操作插入记录,数据入库时程序会出现未响应,cpu占用为0问题分析:
业务逻辑:开了10个线程,执行select查询是否存在记录,不存在就执行insert插入记录。
问题分析:查询msdn,"INSERT 语句总是在其修改的表上获取排他 (X) 锁并在事务完成之前持有该锁。 使用排他锁时,任何其他事务都无法修改数据;仅在使用 NOLOCK 提示或未提交读隔离级别时才会进行读取操作。"
当线程a执行insert操作时,获取排他锁,其实操作系统切换线程给线程b,线程b首先请求获取排他锁,此时就符合发生死锁的条件:循环等待条件(Circular wait):系统中若干进程组成环路,改环路中每个进程都在等待相邻进程正占用的资源。
不知道分析的对不?
- 4 回答
- 0 关注
- 415 浏览
添加回答
举报
0/150
提交
取消