web-dev-qa-db-ja.com

EF Code First-タイムアウトの期限が切れました。完了する前に経過したタイムアウト期間

この奇妙な言葉遣いの質問に対する謝罪。私は実際の問題が何であるかを知りませんが、誰かが私にいくつかの洞察を与えることができることを望みます。

移行を実行しようとすると、次のエラーが表示されます。

Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out

私のラップトップではこれは起きていませんが、私のVM(Azure-大)ではこれは100%の失敗率で起きていることに注意してください。

私はEf 6.0.0 -rc1を使用しています。 EFの更新はオプションではないことに注意してください。 EF 6.0.0または6.0.1に更新する場合、100%の失敗率で次のエラーが表示されます。

Code First add-migration中のエラー

また、エラーのタイミングを計りました。エラーのトリガーには約1.5分かかります。 -Verboseフラグを指定して実行すると、インデックス付きの200個のテーブルを作成しようとしました。 SQLクエリをコピーしてSSMSで実行するには5秒かかります。

疲れたがうまくいかなかったいくつかのこと:

1)ObjectContext.CommandTimeout = 36000 // 10 hours!を次のように設定します。

https://stackoverflow.com/a/6234593/305469

2)「web.config」の接続文字列にタイムアウトを設定します。

connectionString="Data Source=localhost;Initial Catalog=myDB;Integrated Security=SSPI;Connection Timeout=36000"

3)「machine.config」トランザクションmaxTimeoutの設定:

<system.transactions> <machineSettings maxTimeout="00:00:00" /> </system.transactions>

4)SQLサーバーで「リモートクエリタイムアウト」を設定する

USE MyDB;
GO
EXEC sp_configure 'remote query timeout', 0 ;
GO
RECONFIGURE ;
GO

それで何が起きているのでしょうか?なぜCommandTimeoutが尊重されないのですか?助言がありますか?

次のような完全なトレース:

System.Data.SqlClient.SqlException (0x80131904): Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out

   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout)
   at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
   at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
   at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TInterceptionContext,TResult](Func`1 operation, TInterceptionContext interceptionContext, Action`1 executing, Action`1 executed)
   at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext)
   at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()
   at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection)
   at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass32.<ExecuteStatements>b__2e()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0()
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
   at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements)
   at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable`1 operations, IEnumerable`1 systemOperations, Boolean downgrading, Boolean auto)
   at System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration)
   at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
   at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
   at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
   at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
   at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
   at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run()
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner runner)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String targetMigration, Boolean force)
   at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
ClientConnectionId:8cbbc70c-8182-417e-9aca-4603f797340d
Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
22
Chi Chan

Configuration.csクラスのコンストラクター(移行フォルダー内)で、プロパティCommandTimeout = Int32.MaxValue;を追加します。

17
Stephan

SQL Serverサービスを再起動しました(Win7-コンピューターの管理>サービスとアプリケーション>サービス)

6
tennisBoy

私にとって問題は、その移行スクリプトの実行に長い時間(15分)かかったことです。

これは私が問題を回避した方法です:
1。実行update-database -script-forceが必要になる場合があります)
2。このSQLスクリプト出力をコピーして、SQL Server Management Studioで実行します

1
Josh

次のようなクエリを生成していたため、実稼働環境でこれに遭遇しました: Entity Framework 6が単純なルックアップのために複雑なSQLクエリを生成するのはなぜですか?

これは実際、このバージョンのEFのバグに関連しています: https://entityframework.codeplex.com/workitem/2083

デフォルトのnullセマンティクスを5から6に変更したため、アップグレード後に同じ問題が発生したと推測します。私のマシンには、リモートインストールとしてデータの一部があり、本番環境に着くまで、パフォーマンスの問題があることを知りませんでした。多くの場合、クエリはテーブルスキャンを生成しますが、大きなテーブルではタイムアウトになります。

EF5のように機能するように戻すには、設定する必要があります。

DbContextConfiguration.UseDatabaseNullSemantics = true

こちらをご覧ください: http://msdn.Microsoft.com/en-us/library/system.data.entity.infrastructure.dbcontextconfiguration.usedatabasenullsemantics(v = vs.113).aspx

このバグはEF 6.1で修正されましたが、単純なwhere条件を取得するには上記のオプションを設定する必要があります。

0
GrokSrc

私はちょうど同じ問題を抱えていました、私はこのスレッドが1歳であることを知っていますが、おそらく他の誰かを助けるでしょう。

以下の接続文字列を使用して、パッケージマネージャーコンソールを使用してエンティティ5にデータベースを作成しようとしました。

更新データベース-ConfigurationTypeName My.Project.EF.Migrations.Configuration -ConnectionStringName MyDatabaseDev -ProjectName Project.Name -StartUpProjectName Database.Name

実行するたびに、以下のエラーが発生しました。

タイムアウトになりました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。

それを修正するには、単に-forceパラメーターを追加し、すぐに実行されました。

0
Craig Strohl

FYI EF移行は、個別の構成からタイムアウトを引き出します。

public class MyContextConfiguration : DbMigrationsConfiguration<MyContext>
{
    public MyContextConfiguration()
    {
        CommandTimeout = 900;
    }
}

900をもっと高い値に変更すると、他のすべてのSQLタイムアウト変更(web.configなど)は何もしませんでした。

0
ransems