J. Mini Asked: 2024-01-24 19:01:21 +0800 CST2024-01-24 19:01:21 +0800 CST 2024-01-24 19:01:21 +0800 CST 我昨天运行的查询不在计划缓存中,但较旧的和较新的查询却在计划缓存中。为什么? 772 昨天,我运行了一个大型临时查询,但没有保存。今天,我想再看一遍。我想我应该在计划缓存中寻找。令我惊讶的是,我可以找到较旧的查询和较新的查询,但找不到我运行的查询。为什么会这样? 我知道我应该打开查询存储,但我还没有这样做。 sql-server 2 个回答 Voted Erik Darling 2024-01-25T01:25:23+08:002024-01-25T01:25:23+08:00 来自计划缓存内部: 确定驱逐哪些计划是基于计划的成本,这将在下一节中讨论。驱逐何时开始取决于内存压力。当SQL Server检测到内存压力时,零成本计划将从缓存中删除,所有其他计划的成本减少一半。 然后: 从缓存中逐出计划是基于其成本的。对于临时计划,成本被认为是零,但每次重用计划时成本都会增加一。对于其他类型的计划,成本是对制定计划所需资源的衡量。 这里的第二句话可能回答了为什么您的一次性即席查询计划消失了,而其他查询计划却没有。 Best Answer Alocyte 2024-01-24T19:11:22+08:002024-01-24T19:11:22+08:00 我认为该计划很大,如果删除,则提供的空间最多,而其他的价值较低,无法删除,因此保留。较旧的可能仍会被频繁引用...较新的可能会取代其他的,那些被删除的被选择是为了重新创建等效性的收益/成本...
来自计划缓存内部:
然后:
这里的第二句话可能回答了为什么您的一次性即席查询计划消失了,而其他查询计划却没有。
我认为该计划很大,如果删除,则提供的空间最多,而其他的价值较低,无法删除,因此保留。较旧的可能仍会被频繁引用...较新的可能会取代其他的,那些被删除的被选择是为了重新创建等效性的收益/成本...