代码之家  ›  专栏  ›  技术社区  ›  Ogglas

Azure SQL数据库->添加索引->对象'/.rem'已断开连接或服务器上不存在

  •  0
  • Ogglas  · 技术社区  · 6 年前

    2 852,305 MB localdb 我的开发人员机器上的实例,大约100毫秒。

    enter image description here

    然而,对于完全相同的查询和数据,它需要发出呼啸声

    enter image description here

    我在读这个, :使用查询索引可以解决此问题。

    http://capesean.co.za/fixing-slow-performance-with-azure-sql-database/

    我正在使用实体框架,所以我添加了一个 Index 试图逃跑 Update-Database 从…起 PMC 像往常一样。

    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;
        }
        ...
    

    完整堆栈跟踪:

    “/2f49096e\u 0c2e\u 49d6\u a7a0\u 7ffbe823cf87/yxyu+VuywwzB7MYK8FHRW4\u 7932.rem” 已断开连接或服务器上不存在。在 sql)在 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement 迁移语句、数据库连接、数据库事务 事务,DbInterceptOnContext(InterceptOnContext)位于 System.Data.Entity.Migrations.Dbmigator.ExecuteStatementInternal(IEnumerable 1 migrationStatements, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsWithinTransaction(IEnumerable 迁移语句、DbTransaction事务、DbInterceptionContext System.Data.Entity.Migrations.Dbmigator.ExecuteStatementSwitthingTransaction(IEnumerable 1 migrationStatements, DbConnection connection, DbInterceptionContext interceptionContext) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable 迁移语句、数据库连接、数据库拦截上下文 截取上下文)在 1 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](Func 1. System.Data.Entity.Migrations.Dbmigator.ExecuteStatements(IEnumerable 1 migrationStatements, DbTransaction existingTransaction) at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable 1. System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable 1 migrationStatements) at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, VersionedModel targetModel, IEnumerable 1.业务, 数不清 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.
    在 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations,字符串targetMigrationId,字符串lastMigrationId)
    位于System.Data.Entity.Migrations.DbMigrator.UpdateInternal(字符串 在 必须在以下位置成功访问数据库: System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(操作 System.Data.Entity.Migrations.DbMigrator.Update(字符串 目标(迁移)在 System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(字符串 目标(迁移)在 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() 对象 “/2f49096e\u 0c2e\u 49d6\u a7a0\u 7ffbe823cf87/yxyu+VuywwzB7MYK8FHRW4\u 7932.rem”

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ogglas    6 年前

    失败的迁移代码如下所示:

        public override void Up()
        {
            CreateIndex("dbo.MyTable", new[] { "Column1", "Column2", "Column3" }, name: "IX_MyIndex");
        }
    

    为了防止VisualStudio中出现错误,我运行了以下命令 Update-Database -script

    CREATE INDEX [IX_MyIndex] ON [dbo].[MyTable]([Column1], [Column2], [Column3])
    

    这就成功了!查询运行大约需要8分钟。性能现在类似于 localdb :

    enter image description here

    关于 更新数据库-脚本 __MigrationHistory . 我可以从我的电脑上复制这些 本地数据库

    如果存在不匹配,运行任何数据库代码都会出现此错误:

    自 数据库( http://go.microsoft.com/fwlink/?LinkId=238269 )

    https://twitter.com/Ogglas/status/1063927246245822464