如果我将从sql server中的数据库中删除所有统计信息,会对性能产生什么影响?

时间:2017-09-12 12:19:32

标签: sql-server database performance sql-server-2014

我有一个自过去7年以来运行的网站,对于后端数据库,我们使用的是Sql Server 2008,最近我们已经在Sql Server 2014上迁移。

现在有一天,我们面临着一些问题,例如只有一些页面突然出现缓慢。 我想知道这是否是由于表格上的统计数据,这是在慢速页面中使用的。根据{{​​3}}博客文章,建议删除所有现有统计信息,因为我们的数据库也逐渐执行了很多CRUD操作和表定义的更改。

请注意,我已将自动更新统计信息设置为开。

那么我是否必须删除所有统计数据该怎么办?如果是,那么对我当前的Web应用程序的性能影响是什么?有没有其他方法来识别缓慢问题,这种问题确实逐渐没有死锁或阻塞条件?

1 个答案:

答案 0 :(得分:0)

此查询获取所有未使用的索引和统计信息。为了优化您的数据库,您需要分析和调整数据库:

SELECT
    objects.name AS Table_name,
    indexes.name AS Index_name,
    dm_db_index_usage_stats.user_seeks,
    dm_db_index_usage_stats.user_scans,
    dm_db_index_usage_stats.user_updates
FROM
    sys.dm_db_index_usage_stats
    INNER JOIN sys.objects ON dm_db_index_usage_stats.OBJECT_ID = objects.OBJECT_ID
    INNER JOIN sys.indexes ON indexes.index_id = dm_db_index_usage_stats.index_id AND dm_db_index_usage_stats.OBJECT_ID = indexes.OBJECT_ID
WHERE
    indexes.is_primary_key = 0 --This line excludes primary key constarint
    AND
    indexes. is_unique = 0 --This line excludes unique key constarint
    AND 
    dm_db_index_usage_stats.user_updates <> 0 -- This line excludes indexes SQL Server hasn’t done any work with
    AND
    dm_db_index_usage_stats. user_lookups = 0
    AND
    dm_db_index_usage_stats.user_seeks = 0
    AND
    dm_db_index_usage_stats.user_scans = 0
ORDER BY
    dm_db_index_usage_stats.user_updates DESC