Visual Studio数据库架构比较非常慢

时间:2017-11-28 08:37:59

标签: database comparison visual-studio-2017

我们一直在使用Visual Studio 2017的SQL Server架构比较进行所有(SQL Server 2016)迁移和部署。

然而,最近,它变得非常缓慢,需要数小时才能完成。如果我们取消选中" Tables"对象,它很快。但是当检查表格时,它会停留在"初始化比较......"多年。

我无法在网上找到任何有助于我们的信息。有什么想法吗?

Initializing comparison...

3 个答案:

答案 0 :(得分:3)

对我们来说似乎有用的是,如果你排除了表格(在Schema Compare Options - > Object types - > Application-scoped - > Tables),它会很快运行。

最初运行后,您可以再次与所选表格进行比较,并且很好。

除此之外,Visual Studio数据库Schema Compare是一个很棒的工具。

答案 1 :(得分:1)

您可以使用MSSQL Server Management Studio自己的比较或使用以下工具之一:

https://www.agile-code.com/blog/choose-your-sql-server-schema-comparison-tool/

答案 2 :(得分:0)

我遇到了非常相似的问题,并且找到了解决方案。
SELECT * FROM (SELECT SCHEMA_NAME([o].[schema_id]) AS [SchemaName],中以[sys].[spatial_indexes]开头的查询和其他表的计划都不理想,并且运行了几个小时,导致VS超时并重试。 下面提供的计划指南为我解决了这个问题。

因为在第一次尝试获取结果的过程中VS会批量发送所有查询,所以计划指南将不会生效。查询超时后,VS将以其自己的批次重试此查询,并且将应用计划指南。 为了进一步加快处理过程并且不等待超时,您可以在VS会话停留在此查询上时将其终止,并强制重试。

EXEC sp_create_plan_guide   
    @name = N'VS Schema Comp Spatial Idxs',  
    @stmt = N'SELECT * FROM (
SELECT 
        SCHEMA_NAME([o].[schema_id])    AS [SchemaName],
        [si].[object_id]                AS [ColumnSourceId],
        [o].[name]                      AS [ColumnSourceName],
        [o].[type]                      AS [ColumnSourceType],
        [ic].[column_id]                AS [ColumnId],
        [c].[name]                      AS [ColumnName],
        [si].[index_id]                 AS [IndexId],
        [si].[name]                     AS [IndexName],
        [ds].[type]                     AS [DataspaceType],
        [ds].[data_space_id]            AS [DataspaceId],
        [ds].[name]                     AS [DataspaceName],
        [si].[fill_factor]              AS [FillFactor],
        [si].[is_padded]                AS [IsPadded],
        [si].[is_disabled]              AS [IsDisabled],
        [si].[allow_page_locks]         AS [DoAllowPageLocks],
        [si].[allow_row_locks]          AS [DoAllowRowLocks],
        [sit].[cells_per_object]        AS [CellsPerObject],
        [sit].[bounding_box_xmin]       AS [XMin],
        [sit].[bounding_box_xmax]       AS [XMax],
        [sit].[bounding_box_ymin]       AS [YMin],
        [sit].[bounding_box_ymax]       AS [YMax],
        [sit].[level_1_grid]            AS [Level1Grid],
        [sit].[level_2_grid]            AS [Level2Grid],
        [sit].[level_3_grid]            AS [Level3Grid],
        [sit].[level_4_grid]            AS [Level4Grid],
        [sit].[tessellation_scheme]     AS [TessellationScheme],
        [s].[no_recompute]              AS [NoRecomputeStatistics],
        [p].[data_compression]          AS [DataCompressionId],
        CONVERT(bit, CASE WHEN [ti].[data_space_id] = [ds].[data_space_id] THEN 1 ELSE 0 END)
                                        AS [EqualsParentDataSpace]
FROM
        [sys].[spatial_indexes]          AS [si] WITH (NOLOCK)
        INNER JOIN [sys].[objects]       AS [o] WITH (NOLOCK) ON [si].[object_id] = [o].[object_id]
        INNER JOIN [sys].[spatial_index_tessellations] [sit] WITH (NOLOCK) ON [si].[object_id] = [sit].[object_id] AND [si].[index_id] = [sit].[index_id]
        INNER JOIN [sys].[data_spaces]   AS [ds] WITH (NOLOCK) ON [ds].[data_space_id] = [si].[data_space_id] 
        INNER JOIN [sys].[index_columns] AS [ic] WITH (NOLOCK) ON [si].[object_id] = [ic].[object_id] AND [si].[index_id] = [ic].[index_id]
        INNER JOIN [sys].[columns]       AS [c] WITH (NOLOCK) ON [si].[object_id] = [c].[object_id] AND [ic].[column_id] = [c].[column_id]
        INNER JOIN [sys].[objects]       AS [o2] WITH (NOLOCK) ON [o2].[parent_object_id] = [si].[object_id]
        INNER JOIN [sys].[stats]         AS [s] WITH (NOLOCK) ON [o2].[object_id] = [s].[object_id] AND [s].[name] = [si].[name]
        INNER JOIN [sys].[partitions]    AS [p] WITH (NOLOCK) ON [p].[object_id] = [o2].[object_id] AND [p].[partition_number] = 1
        LEFT  JOIN [sys].[indexes]       AS [ti] WITH (NOLOCK) ON [o].[object_id] = [ti].[object_id]
        LEFT JOIN [sys].[tables]         AS [t] WITH (NOLOCK) ON [t].[object_id] = [si].[object_id]
WHERE [si].[is_hypothetical] = 0
        AND [ti].[index_id] < 2
        AND OBJECTPROPERTY([o].[object_id], N''IsSystemTable'') = 0
        AND ([t].[is_filetable] = 0 OR [t].[is_filetable] IS NULL)
        AND ([o].[is_ms_shipped] = 0 AND NOT EXISTS (SELECT *
                                        FROM [sys].[extended_properties]
                                        WHERE     [major_id] = [o].[object_id]
                                              AND [minor_id] = 0
                                              AND [class] = 1
                                              AND [name] = N''microsoft_database_tools_support''
                                       ))
) AS [_results];
',  
    @type = N'SQL',  
    @module_or_batch = NULL,  
    @params = NULL,  
    @hints = N'OPTION (FORCE ORDER)';