Kei*_*ith 3 sql-server statistics index-statistics azure-sql-database
问题的快速背景:我们有一个应用程序,我们有许多为客户端运行的应用程序实例。虽然它们的版本可能略有不同,但它们基本上是相同的。
昨天,一位客户遇到了 SQL 超时问题。查看查询,我们发现某些表存在问题,并使用OUTER APPLY
并重新编写它来规避该问题。
今天检查查询计划,我可以清楚地看到统计数据很糟糕,因为它预计大约有 250 万行,这是不正确的。我更新了统计数据,它已经解决了这个问题,现在预计有 30 行。
我的困惑来自于我检查其他客户数据库的查询计划时,统计信息似乎关闭,但是,查询在大约 1 秒内返回,而不是在所面临的问题中看到的 45 秒。
两个数据库都打开了自动统计。这是否表明问题数据库上的自动统计有问题?
在测试时,我确实清除了缓存,DBCC FREEPROCCACHE
因此引擎每次都必须生成一个计划。但是,我没有在及时返回数据的数据库上执行此操作。
抱歉含糊不清,很遗憾,由于敏感信息,我无法分享查询计划。
目前,我们只运行自动统计更新(没有预定的统计/索引维护)。这会改变;数据库在某种程度上被忽视了。我还应该提到,这些数据库在 Azure 中。我不确定这是否会改变什么?
自动统计和统计本身只是一方面。另一个是计划,计算出的选择性,以及计划可以被缓存的事实。
所以想象一个计划是在统计数据“正常”时生成的(以及其他情况,例如嗅探参数值)。这现在可以在缓存中停留一段时间,即使统计数据恶化(有点),你的“好计划”也可以留在缓存中。
然后你有 autostats 采样数据的方面。数据集越大,采样的数据集部分就越小。因此,即使自动统计开始,对于较大的数据集,您也可能会获得较低质量的统计数据。
归档时间: |
|
查看次数: |
86 次 |
最近记录: |