我收到了之前在SQL Server 2008R2上的数据库,但刚刚放在SQL Server 2014实例上。自2014年以来,在数据库上没有运行任何类型的维护任务(例如,重建索引,更新统计数据等)。
一旦我们将更新统计信息作为我们按设定的时间表执行的定期维护的一部分运行,一些查询的性能已经大大降低到某些选择语句似乎永远不会完成的程度。
查询中包含一些CASE...WHEN
语句,但我不希望会出现这样的性能影响。有没有人对可能导致此类问题的事情有任何想法?
我尝试将兼容级别更新为120,因为当数据库第一次进入时它是100,但是这对性能没有任何影响。
答案 0 :(得分:0)
如果您刚刚移动了数据库,请给系统一些时间来构建其执行计划和缓存。此外,您的索引维护,然后这样的统计数据。不要使用sp_updatestats,因为它只使用数据样本而不是完整扫描。
你得到了什么结果:
SELECT
[sch].[name] + '.' + [so].[name] AS [TableName] ,
[ss].[name] AS [Statistic],
[sp].[last_updated] AS [StatsLastUpdated] ,
[sp].[rows] AS [RowsInTable] ,
[sp].[rows_sampled] AS [RowsSampled] ,
[sp].[modification_counter] AS [RowModifications],
Convert (decimal(18,2),(convert(numeric,[sp].[modification_counter]) / convert(numeric,[sp].[rows]) * 100)) as [Percent_changed]
FROM [sys].[stats] [ss]
JOIN [sys].[objects] [so] ON [ss].[object_id] = [so].[object_id]
JOIN [sys].[schemas] [sch] ON [so].[schema_id] = [sch].[schema_id]
OUTER APPLY [sys].[dm_db_stats_properties]([so].[object_id],
[ss].[stats_id]) sp
WHERE [so].[type] = 'U'
AND [sp].[modification_counter] > 0
And [sp].[last_updated] < getdate()-1
ORDER BY [Percent_changed] DESC