我们正在使用 SQL Server 2016。我们在 2023 年 9 月 11 日的查询持续时间方面遇到一些问题。想在 QueryStore 上检查它,我在 2023 年 9 月 11 日 05:00 PM 执行的查询存储上看到:
2023 年 9 月 11 日,我们的执行次数要多得多(2023 年 9 月 8 日,执行次数约为 1150 VS 800)。我在 2023 年 9 月 12 日运行相同的查询存储检查,发现昨天的执行计数比我昨天检查的要少得多。
你知道为什么我们会有这样的差异吗?更重要的是,我仍然看到 2023 年 9 月 11 日的执行计数仍在减少。
查询执行 2023-09-14 9:52 AM:
GUI 中的查询存储执行计数映射到sys.query_store_runtime_stats中的count_executions列
由于您正在查看“总体资源消耗”,因此我捕获了使用扩展事件调用的基础查询,大致如下:
由于除了日期之外几乎没有过滤器,因此只剩下几个选项。
你的声明没有被调用。也许那天没有进行测试,也许你的代码有一些分支逻辑等等。
有人使用sp_query_store_remove_query或使用sp_query_store_remove_plan的查询计划仅从查询存储中清除了该查询
查询存储暂时切换为只读。您无法在事后检查这一点,但如果您怀疑是这种情况,可以选择在将来使用扩展事件来监视这一点
编辑
在提供了更多信息之后,我倾向于指出
SIZE_BASED_CLEANUP_MODE
文档说:
这与您的屏幕截图相符,即已使用 100 MB 中的 79 MB(大约 80%)
您可以创建一个 XE 会话来跟踪此清理并确保
我已经在最大大小 = 10 MB 的查询存储上对其进行了测试,它大约每 15 - 20 分钟运行一次。
我运行了一堆动态 SQL 来让查询存储增长,并捕获清理前后的执行和计划计数聚合。
我所有的动态 SQL 都同样昂贵,因此最旧的计划首先被淘汰。