.net 长时间运行的sql过程挂起网站
我有一个MVC4 web应用程序,它调用业务层,业务层异步调用数据层方法.net 长时间运行的sql过程挂起网站,.net,sql-server,asp.net-mvc,asynchronous,long-running-processes,.net,Sql Server,Asp.net Mvc,Asynchronous,Long Running Processes,我有一个MVC4 web应用程序,它调用业务层,业务层异步调用数据层方法ExecuteSP。数据层方法ExecuteSP调用长时间运行的存储过程,如下所示: public class MainDataLayer { private Database database; //Enterprise library 5 private DbCommand dbc; private List<SPParams> spParams; public Main
ExecuteSP
。数据层方法ExecuteSP调用长时间运行的存储过程,如下所示:
public class MainDataLayer
{
private Database database; //Enterprise library 5
private DbCommand dbc;
private List<SPParams> spParams;
public MainDataLayer()
{
_database = DatabaseFactory.CreateDatabase("strConn");
//set multiple sp params like the one below
_spParams.Add(new SPParams() { ParamName = "@pID", ParamValue = ID });
}
public DataSet ExecuteSP()
{
dbc = database.GetStoredProcCommand('long_running_sp');
dbc.CommandTimeout = 300;
foreach (SPParams p in spParams)
{
dbc.Parameters.Add(new SqlParameter(p.ParamName, p.ParamValue));
}
DataSet ds = _database.ExecuteDataSet(dbc);
return ds;
}
}
//this class is used in the class above for setting the sp parameters
public class SPParams
{
public string ParamName { get; set; }
public object ParamValue { get; set; }
}
问题是当我从客户端pc A通过部署在测试服务器上的web应用程序调用此存储过程时,它会挂起来自同一客户端或调用该网页的任何其他用户的所有进一步调用,直到存储过程中的2分钟过去。
当我直接从sql management studio运行存储过程并并排运行另一条sql语句时,该存储过程需要2分钟才能执行,而另一条sql语句则会立即执行。数据库方面似乎没有什么需要更改的地方。我的代码可能有什么问题
谢谢改用
异步控制器
?您还可以在sql server仍在执行时使用以下方法检查其状态:当您直接运行查询与从网站调用查询时,sql server似乎使用了不同的执行计划,您可能需要使用探查器进行一些挖掘以查看实际生成的查询,并使用类似“选项强制顺序”的方法为了实施一个特定的执行计划,除此之外,我认为问题在于sql代码,而不是调用它的.net代码。很难解释为什么基于此,但我怀疑您的索引不好。看看查询计划,修复存储过程HI gbn,如果索引不好,从sql客户端运行时应该有相同的效果,对吗?在这里,另一个窗口中的第二个sql快速执行,而不必等待长时间运行的sql在第一个窗口中完成……嗨,Brad。我正在使用.NET4.0
WAITFOR DELAY '0:02:00'