gpt4 book ai didi

sql - 相同的查询 - 查询存储中的不同查询

转载 作者:行者123 更新时间:2023-12-04 22:01:33 25 4
gpt4 key购买 nike

问题:

我们使用 Entity Framework (6.21) 作为我们的 ORM 管理器。
我们的数据库是 Azure Sql 数据库。

因为一些参数化查询(在我们的应用程序中经常使用)在某些输入上很慢(在某些输入上它运行 60 秒,而在其他输入上它运行 0.4 秒)

我们开始使用 MS SQL Management Studio 中的 QueryStore 和 QueryStore Explorer(MSSMS -> Object Explorer -> Query Store)调查这些查询。

我们发现,QueryStore 将两个相同的(相同的 sql 查询但不同的参数 - 参数甚至没有存储)作为不同的查询(具有不同的 query_id)存储。
通过不同的查询,我的意思是表中的不同行sys.query_store_query )。

我通过查看 QueryStore 表进行了检查:

    SELECT 
qStore.query_id,
qStore.query_text_id,
queryTextStore.query_sql_text
ROW_NUMBER() OVER(PARTITION BY query_sql_text ORDER BY query_sql_text ASC) AS rn
FROM
sys.query_store_query qStore
INNER JOIN
sys.query_store_query_text queryTextStore
ON qStore.query_text_id = queryTextStore.query_text_id

Screenshot from MSSSM

我无法在 MSSMS 中轻松比较这些查询的计划,因为每个查询都有自己的关联计划。

预期行为:
我假设每次后续运行具有不同参数的相同查询都会导致:

1/再利用现有计划
或者

2/基于传递的参数值创建另一个计划......

示例:

查询看起来像这样(实际上查询要复杂得多,因为它们是由 EntityFramework 生成的):
SELECT * FROM tbl WHERE a = @__plinq__

并且它的两次后续运行(具有不同的参数)将导致 sys.query_store_query 中的两行.

问题:

如何让 Azure 将具有相同文本的查询保存为相同的查询?或者我错过了什么或者这是预期的行为?

或者更一般地说,如果数据库查询是由 Entity Framework 生成的,如何调整它们?

SQL Server 查询存储如何考虑两个相同或不同的查询?

编辑 1:更新

基于@PeterB 评论( Adding a query hint when calling Table-Valued Function ),我们能够通过对某些参数值的缓慢查询来解决我们的问题(我们在有问题的查询中添加了提示 "recompile")。

根据@GrantFritchey 提示,我检查了context_settings,但 query_store 中仍有多行相同的表 query_sql_text和相同 context_settings_id但不同 query_id .

所以我们仍然想知道 SQL Server Query Store 如何考虑两个相同或不同的查询?

最佳答案

对于不同的查询条目,查询存储用于查询的键包括:

  • query_text_id,
  • context_settings_id,
  • object_id,
  • batch_sql_handle,
  • query_parameterization_type

  • 如果其中任何一项与查询不同,它将在查询表中生成一个新条目。请注意,batch_sql_handle 仅为引用临时表的查询填充。
    因此,您可以针对您列出的查询检查这些值中的哪些不同。

    目前没有控制查询存储聚合查询方式的设置。将它们视为相同的唯一方法是更改​​您的工作量,以便上面列出的字段匹配。但另一种可能更好的方法是您编写自己的报告查询,这些查询将根据您的需要聚合查询及其统计信息。

    关于sql - 相同的查询 - 查询存储中的不同查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48154289/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com