首页新闻找找看学习计划

ef 事务并发测试引发的查询缓慢如何解决,如何查找问题?

0
悬赏园豆:20 [待解决问题]

后端代码加了单用户锁,用户处理订单重复提交,进入锁以后,采用entityframework的事务开启事务,事务里面库存,余额等的判断,保存订单主表和订单商品子表,同时去操作商品规格的库存,用jmeter 做并发测试,500线程并发操作,事务平均执行时间在5-6s之间,事务并发期间前台刷新巨慢,事务并发完成,前台也能刷新出来了,有相关经验的能给指出是哪的原因吗,事务并发会锁住整张表吗,其中事务操作的账户表加了行版本,按说应该是锁行级数据,怎么会导致其他数据查询不出呢?通过代码排除,发现最后影响性能的地方就是并发减库存和订单保存的代码,我想要的效果是事务并发不影响前台的查询操作,前台可以正常操作,如何解决此问题,求大神支招?

狼性法则的主页 狼性法则 | 初学一级 | 园豆:133
提问于:2019-11-12 20:16
< >
分享
所有回答(3)
0

用乐观锁别用事物,举个例子比如你查A表xx货物XX件,然后他购买是吧,然后再查一次A表XX货物XX件,如果与第一次相同,那就提交修改,如果不同,请用户刷新下数量,不过这样有缺点用户体验不好很好,不过也可以解决就是自己循环任务一下1秒查一下循环3次,给用户界面展示效果为订单提交中,其实发生事情是查表,提交前再查表,再提交

小小咸鱼YwY | 园豆:1059 (小虾三级) | 2019-11-12 20:41

不是个好办法,多业务逻辑保持操作一致性,不能每个逻辑都这样判断吧

支持(0) 反对(0) 狼性法则 | 园豆:133 (初学一级) | 2019-11-13 08:48

@狼性法则: 你会用RabbitMQ?会用这个也可以解决

支持(0) 反对(0) 小小咸鱼YwY | 园豆:1059 (小虾三级) | 2019-11-13 15:20

@小小咸鱼YwY: 要想用这个RabbitMQ,我完全可以用redis队列去做,用队列就得引入及时消息通知的插件,客户端需要及时返回消息

支持(0) 反对(0) 狼性法则 | 园豆:133 (初学一级) | 2019-11-15 11:13
0

事务并发锁住表示数据库级别的锁的关系,要看数据库是什么级别的锁,在代码里面加锁,跟数据库的锁是两码事

不知道风往哪儿吹 | 园豆:478 (菜鸟二级) | 2019-11-13 10:30

数据库加的是行锁,直接按Id查询,单条记录阻塞,其他可以访问

支持(0) 反对(0) 狼性法则 | 园豆:133 (初学一级) | 2019-11-13 10:31

@狼性法则: 数据库的隔离级别是什么等级的

支持(0) 反对(0) 不知道风往哪儿吹 | 园豆:478 (菜鸟二级) | 2019-11-13 10:39

@不知道风往哪儿吹: 数据库都是加的行锁

支持(0) 反对(0) 狼性法则 | 园豆:133 (初学一级) | 2019-11-13 10:43

@狼性法则: 隔离级别会影响锁,锁是隔离级别的具体实现,要看你设置的隔离级别是什么,有可能影响锁的实现

支持(0) 反对(0) 不知道风往哪儿吹 | 园豆:478 (菜鸟二级) | 2019-11-13 10:45
0

查询一般来说不会影响的。
一般是多个操作方面的东西才会互相影响。

gw2010 | 园豆:1394 (小虾三级) | 2019-11-15 10:34

查询非锁定行无影响

支持(0) 反对(0) 狼性法则 | 园豆:133 (初学一级) | 2019-11-15 11:13

@狼性法则: 对对,如果是sqlserver是系统是可以到行,到索引,所以你查询一个是条件上做控制,还有如果只是查询可以考虑with(nolock)
刚才查了一下,可以设置隔离级别也可以处理你说的情况。

支持(0) 反对(0) gw2010 | 园豆:1394 (小虾三级) | 2019-11-15 15:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册