【发布时间】:2018-11-17 22:26:25
【问题描述】:
我的数据库中有一个很大的表,当前大小是2 852,305 MB。我可以在我的开发人员机器上使用localdb 实例快速查询这个数据库,大约需要 100 毫秒。
但是,在具有 20 个 DTU (S1) 的 Azure SQL 数据库上,使用完全相同的查询和数据需要 70 秒!
我正在阅读此内容,TL;DR:使用索引进行查询可以解决问题。
http://capesean.co.za/fixing-slow-performance-with-azure-sql-database/
我正在使用实体框架,所以我添加了一个Index,并尝试像往常一样从PMC 运行Update-Database。
https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/data-annotations#multiple-column-indexes
但是没有添加索引,我不断收到错误Object '/.rem' has been disconnected or does not exist at the server.。我已经阅读了以下相同的错误代码,但考虑到我无法控制对象的生命周期的情况。
"Object has been disconnected or does not exist at the server" exception
我能做些什么来解决这个问题?
这也可能不是超时问题,迁移和ApplicationDbContext 都发生了超时。
internal sealed class Configuration : DbMigrationsConfiguration<ApplicationDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
CommandTimeout = 10000; // migration timeout
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
//Log to output
Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
//Prevent timeouts
Database.CommandTimeout = 1800;
}
...
完整的堆栈跟踪:
System.Runtime.Remoting.RemotingException:对象 '/2f49096e_0c2e_49d6_a7a0_7ffbe823cf87/yxyu+vuywlowzb7myk8fhrw4_7932.rem' 已断开连接或在服务器上不存在。在 System.Data.Entity.Migrations.Design.ToolingFacade.ToolLogger.Verbose(字符串 sql) 在 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement、DbConnection 连接、DbTransaction 事务,DbInterceptionContext 拦截上下文)在 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable
1 migrationStatements, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable1 migrationStatements、DbTransaction 事务、DbInterceptionContext 拦截上下文)在 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinNewTransaction(IEnumerable1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable1 migrationStatements、DbConnection 连接、DbInterceptionContext 拦截上下文)在 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable1 migrationStatements, DbConnection connection) at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClass32.<ExecuteStatements>b__30() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.<>c__DisplayClass1.<Execute>b__0() at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func1 操作)在 System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(操作 操作)在 System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable1 migrationStatements, DbTransaction existingTransaction) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable1 迁移声明)在 System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable1 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable1 操作, IEnumerable1 systemOperations, Boolean downgrading, Boolean auto)1 pendingMigrations, 字符串 targetMigrationId, 字符串 lastMigrationId)
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
在 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, 字符串 targetMigrationId, 字符串 lastMigrationId)
在 System.Data.Entity.Migrations.DbMigrator.UpdateInternal(字符串 目标迁移)在 System.Data.Entity.Migrations.DbMigrator.c__DisplayClasse.b__d() 在 System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(操作 mustSucceedToKeepDatabase) 在 System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(操作 mustSucceedToKeepDatabase) 在 System.Data.Entity.Migrations.DbMigrator.Update(字符串 目标迁移)在 System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(字符串 目标迁移)在 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() 在 System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run() 目的 '/2f49096e_0c2e_49d6_a7a0_7ffbe823cf87/yxyu+vuywlowzb7myk8fhrw4_7932.rem' 已断开连接或在服务器上不存在。
【问题讨论】:
标签: c# sql-server entity-framework azure azure-sql-database