Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 经常使用“使用FULLSCAN更新统计信息”是正常的吗?_Sql_Sql Server_Sql Update - Fatal编程技术网

Sql 经常使用“使用FULLSCAN更新统计信息”是正常的吗?

Sql 经常使用“使用FULLSCAN更新统计信息”是正常的吗?,sql,sql-server,sql-update,Sql,Sql Server,Sql Update,几个月前,我的Asp.net应用程序在数据库上执行一个简单的select时给了我一个超时异常,其中包含特定的where值 奇怪的是,如果没有where子句或不同的值,select将返回结果而不超时 通过在所有表中执行“使用FULLSCAN更新统计信息”解决了此错误 3个月后,超时错误再次出现,并通过更新统计信息再次解决 这个错误开始频繁出现,然后我开发了一个带有计时器的服务来自动执行更新 使用更新统计数据的需要变成每月一次,每周一次,每天一次,每小时一次,现在每15分钟一次 这不正常,对吧?避免

几个月前,我的Asp.net应用程序在数据库上执行一个简单的select时给了我一个超时异常,其中包含特定的where值

奇怪的是,如果没有where子句或不同的值,select将返回结果而不超时

通过在所有表中执行“使用FULLSCAN更新统计信息”解决了此错误

3个月后,超时错误再次出现,并通过更新统计信息再次解决

这个错误开始频繁出现,然后我开发了一个带有计时器的服务来自动执行更新

使用更新统计数据的需要变成每月一次,每周一次,每天一次,每小时一次,现在每15分钟一次

这不正常,对吧?避免这个问题的最佳做法是什么


数据库不小。实际大小几乎为1GB。当数据库大约为300MB时,这个问题就开始了。

您有在数据库上运行的维护计划吗

如果没有,请查看一些很酷的免费代码,用于备份、碎片整理索引和更新统计信息

是否为数据库设置了更新统计信息

数据输入数据库,统计数据变形,这是生活中的一个事实。有一个神奇的数字告诉数据库何时自动更新统计数据。它基于输入的行数。在SQL Server内部构件手册中搜索答案


要确保您拥有最新的统计数据,只需运行作业来维护它们。

您不必每隔15分钟更新一次统计数据。我的猜测是存在参数嗅探问题。统计信息更新只是强制重新编译并掩盖问题,直到缓存了错误的参数


做一些关于参数嗅探的作业。查看统计信息更新前后的查询计划。有时,您可以通过向查询中添加重新编译提示或更好的索引来解决这些类型的问题

这听起来像是一个非常常见的问题。正如rsd808提到的,这可能是因为SQL Server为特定查询错误地缓存了错误的计划。狡猾的DBA推荐Ola Hallengren的维护脚本也是明智的建议

如果您包含导致问题的查询的一些详细信息,这将非常有帮助。在我看到这个问题的情况下,它通常与正在使用的非常无害的用户定义函数有关

如果UDF确实是问题所在,其中一个原因可能是您在两个不同的场景中使用相同的UDF。当查询优化器第一次分析查询时,可能会发现只有几行匹配。这将优化查询,从那时起使用特定的计划,而不管其他情况是否需要扫描数千行

如前所述,以15分钟为基础更新统计数据是非常过分的,并且会要求SQL server每隔15分钟重新评估每个查询,而不是将优化的计划存储更长时间,从而影响性能

使用www.brentozar.com上提供的优秀资源,帮助分析哪些查询影响最大。Brent有一个YouTube频道,我相信它提供了最有价值的免费在线资源,用于服务器性能故障排除和提高查询性能。他修复慢速查询的能力甚至使用了StackOverflow数据库