IE 访问服务器页面调试显示挂起,数据提交一直在挂起状态(IE显示请求挂起)...

最近突然发现项目提交的时候一直在提交状态,不能提交成功,客户反馈提交了4个多小时还在提交中,应用也没发现什么明显错误,前台显示以下(IE下才会有这种提示,其余的浏览器没错误):mysql

2fba9dbd7788492fb6452061.html

刚发现该问题的时候,网络查了一遍基本没发现靠谱的,却是看到一个有意思的sql

2fba9dbd7788492fb6452061.html

按照这位大佬的方法修改了,依旧仍是没法提交,请求一直在挂起状态,程序中的各类页面跳转没有任何问题,就是在提交的时候没法提交成功,找了一两天,感受不是程序的问题,将目光转向数据库。数据库

发现数据库一堆锁表,问题终于肯定是数据库锁表致使提交不成功的,使用工具查询浏览器

2fba9dbd7788492fb6452061.html

各类锁,看sql是一条查询语句好久没出结果,而这个查询语句锁了表。网络

在印象中锁表一直都是插入和更新才锁表,并且仍是行锁,查询也会锁表,赶忙补习一下,数据库的锁有不少种,但大体能够分为S锁(共享锁)以及U锁(排他锁),查询的时候会加上S锁,S锁对其余的查询无影响,可是插入和更新则会由于这个锁致使没法插入和更新,而这个sql查询统计的时候耗时很是久,故而致使了整个应用出现问题。根据工具排查出某个古老的应用在进行这个查询,临时先将该应用关闭,恢复正常的业务。架构

但问题仍是要解决,总不能一直关闭那个老应用吧,暂时给出的方案:工具

1,对表增长索引,让查询更快点sqlserver

2,对查询语句进行修改,加上 WITH(NOLOCK) 来去掉这个共享锁,固然这也会产生其余问题,好比脏读问题,具体仍是要看各自的业务,我这里这个查询并不影响,直接加上 WITH(NOLOCK) 便可,就不会影响插入更新了。spa

另外补充点:加了nolock其实仍是有锁的, 不少人误觉得使用了WITH(NOLOCK)后,数据库库不会产生任何锁。实质上,使用了WITH(NOLOCK)后,数据库依然对该表对象生成Sch-S(架构稳定性)锁以及DB类型的共享锁 ,这种锁若是你加入了新的列,而这个插入新列仍是事务中,你会发现查询又会有阻塞,但实际这已经没影响了。server

另外补充点小知识:

查询的时候是行锁仍是表锁?

以mysql为例,有索引而且使用了该索引当条件的时候就是行锁,没有索引的时候就是表锁。innodb 的行锁是在有索引的状况下,没有索引的表是锁定全表的。看到这里应该明白了吧,其实加索引也能解决上面那个查询锁表的问题

更新与插入的时候是行锁仍是表锁?

sqlserver增删改数据时候,对表加IX锁,会阻止非脏读查询,可是不会阻止其余的不一样记录的增删改,可是若是执行select则会被堵塞住

查询的时候是行锁仍是表锁?

以mysql为例,有索引而且使用了该索引当条件的时候就是行锁,没有索引的时候就是表锁。innodb 的行锁是在有索引的状况下,没有索引的表是锁定全表的.

更新与插入的时候是行锁仍是表锁?

sqlserver增删改数据时候,对表加IX锁,会阻止非脏读查询,可是不会阻止其余的不一样记录的增删改,可是若是执行select则会被堵塞住

2fba9dbd7788492fb6452061.html

2fba9dbd7788492fb6452061.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值