jac*_*k_c 5 linq sql-server asp.net entity-framework
我们有一个我继承的MVC Web应用程序加载,让我们称之为MyCategory及其所有子项为webform,进行编辑,然后保存点击保存.应用程序的工作方式是首先删除模型中父级实体的所有数据,然后重新添加所有内容.我们的并发用户数非常低,每个露水时间最多不超过20人.我们无法在本地重现此错误,但当离岸团队开始工作时,我们已经开始看到了
[SqlException(0x80131904):超时已过期.操作完成之前经过的超时时间或服务器没有响应.该语句已终止.]
出现错误.在父表上从LINQ调用删除时会发生这种情况(此时它没有数据,子表也没有).这是间歇性的,但在过去一周发生了很多次,其中该项目的这部分工作有所增加.
在Stack Trace中,它看起来在System.Data.SqlClient.SqlCommand.FinishExecuteReader上失败了,它似乎要持续109+分钟.这应该是从表中删除最多tqo记录,并且从该表加载数据的任何人应该在很短的时间内检索最多两个.
任何关于从哪里开始的想法将不胜感激.不幸的是,我没有权限在生产数据库上运行SQL查询分析器或活动监视器.
调用堆栈是:
[SqlException (0x80131904): Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
The statement has been terminated.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +388
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +717
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4515
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +6557561
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) +6560327
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +586
   System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +742
   System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +287
   System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) +789
   System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) +188
   System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +500
   System.Data.Linq.StandardChangeDirector.DynamicDelete(TrackedObject item) +71
   System.Data.Linq.StandardChangeDirector.Delete(TrackedObject item) +258
   System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) +622
   System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) +932
   WebAppData.MyCategory.MyCategoryData.DeleteAll(Int32 id, Guid gid) +1053
   WebAppServices.MyCategory.MyCategoryService.DeleteMyCategoryParentItems(Int32 id, Guid gId) +1632
   WebAppServices.MyCategory.MyCategoryService.UpdateMyCategory(Int32 id, Guid gId, MyCategoryEntity mce) +51
   WebAppUI.Areas.Documents.Categories.Sections.MyCategory.MyCategoryController.Save(Int32 Id, Guid gId, MyCategoryModel model) +93
编辑:
连接字符串:
<add name="Data" connectionString="Data Source=myserver;Initial Catalog=mydatabase;User ID=myuser;Password=mypassword />
对当前数据库中的所有用户定义表和内部表运行 UPDATE STATISTICS。
USE database_name;  
GO  
EXEC sp_updatestats;
参考:https : //docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-updatestats-transact-sql?view=sql-server-2017
这是您现在问题的一个临时解决方案.您可以增加Timeout如下所示.但是您必须找出EF query导致此问题的原因,并且需要提高性能.
注意:这里的时间是秒
public DbContext() : base("Default")
{
    this.Database.CommandTimeout = 60;
}
| 归档时间: | 
 | 
| 查看次数: | 9810 次 | 
| 最近记录: |