标签: sql-query-store

从查询存储报告中删除查询

我刚刚开始在 SQL Server 2016 中使用查询数据存储,它确实非常有用。我遇到的问题是,服务器上有许多服务正在监视服务代理队列,因此它们的 WAITFOR 语句始终在报告中显示为运行时间最长的查询。这本身不是问题,但它们运行的​​时间太长,以至于扭曲了报告上的持续时间轴,使得所有其他查询几乎不可见。

有什么方法可以让查询存储忽略查询,这样它就不会显示在报告中吗?

sql-server-2016 sql-query-store

6
推荐指数
1
解决办法
955
查看次数

如何在 SQL Server 2016+ 中使用查询存储查找哪个程序或用户执行了查询

启用查询存储后,如何查找执行查询的人。例如,在跟踪收集的情况下,TRC 文件将获取主机名和程序详细信息以供查询,而在扩展事件的情况下,我们有 XEL 文件将获取主机名和程序详细信息。我们尝试了代码

SELECT des.program_name,
des.host_name,
*
FROM sys.query_store_query_text qt -- Query Text
JOIN sys.query_store_query q ON qt.query_text_id = q.query_id -- Query Data
JOIN sys.query_store_plan qp on qp.query_id = q.query_id --  Query Plan
join sys.dm_exec_requests der on der.query_hash = q.query_hash -- Get session id for query
join sys.dm_exec_sessions des on des.session_id = der.session_id -- Session Info
order by q.last_execution_time desc
Run Code Online (Sandbox Code Playgroud)

下面的 DMV 返回查询哈希 (query_hash) 的空值,因此上面的查询没有数据

select * from sys.dm_exec_requests der
select * from sys.dm_exec_sessions des
Run Code Online (Sandbox Code Playgroud)

sql-server performance monitoring sql-server-2016 sql-query-store

6
推荐指数
1
解决办法
3089
查看次数

如何判断SQL数据库是否启用了QUERY_STORE?

如何判断Azure SQL数据库是否已打开QUERY_STORE

您可以使用以下命令启用它:

ALTER DATABASE <database_name> SET QUERY_STORE = ON;
Run Code Online (Sandbox Code Playgroud)

我认为检查数据库应该很简单,但我还没有找到诀窍.

仅供参考,我在已启用它的数据库上尝试了此命令,但该命令只返回null:

SELECT DATABASEPROPERTYEX ('<database_name>', 'QUERY_STORE')
Run Code Online (Sandbox Code Playgroud)

sql-server azure azure-sql-database sql-query-store

5
推荐指数
2
解决办法
2353
查看次数

在右表的非唯一列上左连接两个表

我在 sql server 中有两个表,我想从这些表中选择并加入一些数据。第一个表有一些客户,例如:

---------------
customer   id   
Dave       1    
Tom        2     
---------------
Run Code Online (Sandbox Code Playgroud)

和第二个表 i 购买表,其中包括最后一次购买的清单和成本以及哪个客户购买了该产品:

------------------
product    date       customer id
PC         1-1-2000   1
phone      2-3-2000   2
laptop     3-1-2000   1
------------------
Run Code Online (Sandbox Code Playgroud)

我想选择最后购买日期的第一张桌子(客户信息)!我尝试过左连接,但这并没有给我最后一次购买,因为客户 ID 在第二个表中不是唯一的!我如何使用 SQL 服务器查询来执行此功能?问候

sql sql-server join left-join sql-query-store

5
推荐指数
1
解决办法
1万
查看次数

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

问题:

我们使用实体框架(6.21)作为我们的 ORM 管理器。我们的数据库是Azure Sql 数据库。

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

我们开始使用 MS SQL Management Studio 中的 QueryStore 和 QueryStore 资源管理器(MSSMS -> 对象资源管理器 -> 查询存储)调查这些查询。

我们发现,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
Run Code Online (Sandbox Code Playgroud)

截图来自MSSSM

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

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

1/ 重新使用现有计划或

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

例子:

查询看起来像这样(实际上查询要复杂得多,因为它们是由 EntityFramework 生成的):

SELECT …
Run Code Online (Sandbox Code Playgroud)

sql sql-server entity-framework azure-sql-database sql-query-store

5
推荐指数
1
解决办法
1393
查看次数

SQL Server查询存储:[sys.query_store_query_text]。[query_sql_text]被截断了吗?

我正在对查询存储使用以下查询:

SELECT 
TOP 100
    qp.last_execution_time [qp__last_execution_time],
    qt.query_sql_text,
    len(qt.query_sql_text) sql_length,      
    round(rs.avg_duration ,5) avg_duration
    ,max_rowcount,avg_rowcount,last_rowcount
FROM 
    sys.query_store_plan qp
    INNER JOIN sys.query_store_query         [q]        ON qp.query_id = q.query_id
    INNER JOIN sys.query_store_query_text    [qt]       ON q.query_text_id = qt.query_text_id
    INNER JOIN sys.query_store_runtime_stats [rs]       ON qp.plan_id = rs.plan_id
WHERE
order by len(qt.query_sql_text) desc
Run Code Online (Sandbox Code Playgroud)

我注意到的是[query_sql_text]似乎被截断了,例如,典型的语句将以以下结尾:

CAST( '20170920 00:00:00' AS datetime),CAST( '20140701 00:00:
Run Code Online (Sandbox Code Playgroud)

可能相关:
这种情况下的SQL由Power BI生成。
当文本被截断时,len(qt.query_sql_text)不会最大化为相同值。
我正在通过从SSMS结果窗格复制/粘贴到记事本中查看SQL。

SQL版本:Microsoft SQL Azure(RTM)-12.0.2000.8 2017年8月29日13:06:11

我记得在其他“系统表”中,SQL Server会截断SQL。

因此,问题是:有人可以明确地说[sys.query_store_query_text]。[query_sql_text]在某些情况下是否可以被SQL Server本身截断?

在客户端应用程序中发生截断的另一种可能性没有任何意义,因为它必须向SQL Server发送完整的有效SQL语句,否则如何执行?但是,len(query_sql_text)中的差异排除了超出列长度限制的情况。

这可能是怎么回事?

sql-server azure-sql-database sql-query-store

1
推荐指数
1
解决办法
292
查看次数