我们的实时数据库存在问题,其中从测试实例执行的查询引用了实时实例导致块,因为它显示为“暂停”,这导致用户请求备份,所有这些都是由于这个查询。
查看查询,一开始有一个请求引用了实时数据库:
SELECT [Columns]
INTO #TempTable
FROM [LIVESERVER\LIVEINSTANCE].[LIVEDB].[dbo].Users AS sv
RIGHT JOIN [LIVESERVER\LIVEINSTANCE].[LIVEDB].[dbo].Company AS co
INNER JOIN [LIVESERVER\LIVEINSTANCE].[LIVEDB].[dbo].Company_Marketing AS cm ON co.co_ref = cm.cmk_co_ref
INNER JOIN [LIVESERVER\LIVEINSTANCE].[LIVEDB].[dbo].Property AS pr ON co.co_pr_ref = pr.pr_ref
LEFT JOIN [LIVESERVER\LIVEINSTANCE].[LIVEDB].[dbo].Company_Types AS ct ON co.co_cot_id = ct.cot_id
LEFT JOIN [LIVESERVER\LIVEINSTANCE].[LIVEDB].[dbo].Users AS cb ON cm.cmk_called_by = cb.us_id
LEFT JOIN [LIVESERVER\LIVEINSTANCE].[LIVEDB].[dbo].Marketing_Disciplines AS md ON cm.cmk_mdi_id = md.mdi_id
LEFT JOIN [LIVESERVER\LIVEINSTANCE].[LIVEDB].[dbo].REGIONS AS rg ON sv.us_reg_id = rg.reg_id
LEFT JOIN [LIVESERVER\LIVEINSTANCE].[LIVEDB].[dbo].REGIONS AS rg1 ON CB.us_reg_id = rg1.reg_id
WHERE cm.cmk_appointment …Run Code Online (Sandbox Code Playgroud) 问题的快速背景:我们有一个应用程序,我们有许多为客户端运行的应用程序实例。虽然它们的版本可能略有不同,但它们基本上是相同的。
昨天,一位客户遇到了 SQL 超时问题。查看查询,我们发现某些表存在问题,并使用OUTER APPLY并重新编写它来规避该问题。
今天检查查询计划,我可以清楚地看到统计数据很糟糕,因为它预计大约有 250 万行,这是不正确的。我更新了统计数据,它已经解决了这个问题,现在预计有 30 行。
我的困惑来自于我检查其他客户数据库的查询计划时,统计信息似乎关闭,但是,查询在大约 1 秒内返回,而不是在所面临的问题中看到的 45 秒。
两个数据库都打开了自动统计。这是否表明问题数据库上的自动统计有问题?
在测试时,我确实清除了缓存,DBCC FREEPROCCACHE因此引擎每次都必须生成一个计划。但是,我没有在及时返回数据的数据库上执行此操作。
抱歉含糊不清,很遗憾,由于敏感信息,我无法分享查询计划。
目前,我们只运行自动统计更新(没有预定的统计/索引维护)。这会改变;数据库在某种程度上被忽视了。我还应该提到,这些数据库在 Azure 中。我不确定这是否会改变什么?