我有一个程序由于参数嗅探而出现性能问题。该过程是昂贵的,但是通常在典型的负载下在可接受的时间内执行。但是,它将定期表现不佳。发生这种情况时,我们看到执行该过程的会话会并行进行。我们将看到执行例程的会话数开始增加。我们通过从缓存中拉出该过程的计划,取消活动会话并监视是否立即发生(例如,当一个坏计划最终返回到缓存中时)来解决该问题。
该过程在典型的OLTP数据库中(许多小型DML查询)。当主题查询执行不佳时,它将导致CPU峰值并降低相关服务的性能。在工作时间内,该过程每分钟执行5次以上(没有确切的计数)。该过程的计划在这里:
https://www.brentozar.com/pastetheplan/?id=S1aEVQJBN
查询中的所有列(联接列和投影列)都被索引覆盖。
以下是我正在权衡的选项:
我排除的选项:
我错过了任何明智的选择吗?哪些选项最有意义?