问题:
如题:
现在是这样,公司原本的老项目,在一个客户那里出现的问题,客户公司每天8点半上班,会有40人左右同时登录系统。从而会出现个别用户登录超时,用户登录需要1分钟左右才能进系统。
登录的代码是公司同事在7年以前写的,貌似后来改动的很少。
看代码,发现登录的时用了TransactionScope。并且在事务中做了以下操作:
1、查询数据库对比用户密码;
2、更新用户最新登录时间;
3、插入、更新用户登录记录
4、查询用户角色并保存(foreach循环);
5、查询用户部门并保存(foreach循环);
6、查询岗位并保存(foreach循环);
7、查询用户组并保存(foreach循环);
8、将用户信息写入cookie;
做为一个搞开发的,登录这种操作,两三秒都闲慢了,现在居然需要几十秒到1分钟,简直不能忍。
所以现在想请教一下大神,有没有好的优化方法,可以对这个登录操作进行更好的优化。
ps: 早上临时将更新用户登录时间和更新用户登录记录的两个方法给注释,让用户勉强可以登录进去。
回答1:
1. 去掉TransactionScope
2. 查看更新的SQL语句的where条件是否添加了索引
3. 4个foreach循环改写成一个视图,直接一个查询搞定四步操作
回答2:
是什么原因导致的?我很好奇,是数据量太大吗?用户、角色,部门这些表能有多少数据呀?
回答3:
有ip吗...这个你可以留着,那天公司对你不好你就登录几十次就行了,这个还合情合理
回答4:
这些操作完全可以不用 TransactionScope ,去掉这个。
回答5:
问题写得这么详细确实不容易了。
好的优化方法就是像你这么细心,一个个问题找下去,你就会成为大神的。
哪些操作是不必要的,哪些操作是过渡设计,哪些操作是可以乐观锁,,哪些操作是不必使用事务的。
这些都是新手不会去考虑的。
一般这种客户不可能给很多钱,所以瞎写一个很正常的,反正并发也不多,一分钟也能忍受。
回答6:
我相信写这个登录的人一定是个大神。