我们有这个数据库应用程序,它不断运行具有不同参数的复杂查询。它是一个编译存储过程 (C#),它调用 4 个普通存储过程,它们将 4 到 6 个表连接在一起,并且 C# 代码在调用之间合并结果。
这已经运行良好(快速)6 个月,直到数据库恢复。然后性能从几乎瞬间变为 20 多秒。谷歌搜索清楚地表明更新统计信息必须在表上运行,是的,它有效,再次即时查询。
但是一个月后问题又来了。好的,没问题,再次“更新统计信息”。又快了。然后花了一个星期才回来。出乎意料的慢查询。然后问题越来越快地再次出现,此时更新统计数据不再有帮助。
如何分析这类问题?关于性能方面的编译存储过程和查询计划有什么需要了解的吗?