运行 SQL Server Express 2019。
有一个包含 11 条 sql 语句的复杂存储过程(当从sys.dm_exec_query_statsby 中选择时plan_handle)。
其中 9 个语句是基于传入参数的简单变量设置,最后 2 个语句 ( IF/ELSE) 完成所有工作并返回数据(例如query_hash0x111... 和 0x222...)。
基于输入参数的数据量有很大的可变性,所以我用最佳值“准备”存储过程以确保快速执行。
我注意到每隔几天(有时更频繁),我的最后 2 个语句(query_hash0x111...和 0x222...)被转储sys.dm_exec_query_stats,然后根据下一个存储过程中来自用户的任何参数重新生成称呼。
我通过查看creation_time列知道这一点,它反映了前 9 个查询的“启动”时间,以及query_hash0x111... 和 0x222...的稍后时间。
据我了解,缓存计划在内存压力下被清除,较少使用的计划首先被清除。我的查询被大量使用,并且我有很多其他缓存计划,其中 1 次执行会持续一段时间。
问题:为什么我最常用的查询会转储表单缓存,我该如何阻止它发生?