VS2013 Web Forms项目修改用户账户详情时遇SqlException连接超时问题
解决修改用户账户时的SQL连接超时问题
嘿,针对你用VS2013 Web Forms模板+SQL Server 2014+Entity Framework的项目,修改用户账户时碰到的System.Data.SqlClient.SqlException连接超时问题,我整理了几个实战中管用的排查和解决方向:
先调大连接超时参数
首先看看web.config里的EF连接字符串,默认的Connect Timeout一般是15秒,如果修改用户的操作涉及较多数据或者关联查询,很容易超时间。把这个值调高试试,比如改成60秒:<add name="YourDbContextName" connectionString="Data Source=你的SQL服务器地址;Initial Catalog=你的数据库名;User ID=账号;Password=密码;Connect Timeout=60;" providerName="System.Data.SqlClient" />另外,也可以在你的DbContext构造函数里设置EF的命令超时:
public YourDbContext() : base("你的连接字符串名") { this.Database.CommandTimeout = 60; // 单位是秒,根据实际情况调整 }检查SQL Server端的状态
打开SQL Server Management Studio 2014,排查下数据库本身的问题:- 看看服务器的CPU、内存占用是不是爆表了?负载太高会导致所有请求变慢
- 有没有阻塞进程?用活动监视器或者执行
sp_who2命令,看看修改用户表的操作是不是被其他长事务锁住了 - 检查用户表的索引是不是合理?如果更新语句没有用到合适的索引,会触发全表扫描,拖慢执行速度
排查EF代码里的冗余操作
看看你修改用户账户的业务代码,是不是不小心触发了不必要的查询?比如:- 有没有用延迟加载导致加载了大量关联数据?可以改成显式加载需要的关联项,减少数据库请求
- 是不是重复调用了
SaveChanges()?或者有没有循环引用导致EF执行了多余的操作
排查网络层面的问题
错误里提到“预登录握手确认超时”,这有时候是网络的锅:- 试试在应用服务器上ping数据库服务器,看看网络延迟是不是很高
- 检查防火墙或者杀毒软件有没有拦截SQL Server的默认端口(1433)
- 如果是远程数据库,确认数据库服务器的TCP/IP协议已经启用
小技巧:先在SSMS里手动执行修改用户的SQL语句,如果执行很快,那问题大概率在应用端的EF配置或者连接池;如果SSMS里也慢,那就是数据库端的性能或者锁的问题,优先优化数据库。
内容的提问来源于stack exchange,提问作者Patrick Kiringai
相关产品推荐
相关产品推荐

