我在 SQL 2017 上启用了查询存储,我看到在SELECT *
特定表上经常发生的查询。
我想缩小此请求的来源范围,看看我们是否可以找到比执行SELECT *
.
当然,我有一个来自查询存储的查询 ID。我最近还要求我的开发人员在他们的连接字符串中包含应用程序名称,许多人已经这样做了。
有没有一种方法(例如,可能使用 DMV)我可以找出与此查询关联的应用程序名称?
我在 SQL 2017 上启用了查询存储,我看到在SELECT *
特定表上经常发生的查询。
我想缩小此请求的来源范围,看看我们是否可以找到比执行SELECT *
.
当然,我有一个来自查询存储的查询 ID。我最近还要求我的开发人员在他们的连接字符串中包含应用程序名称,许多人已经这样做了。
有没有一种方法(例如,可能使用 DMV)我可以找出与此查询关联的应用程序名称?
在查询存储 DMV 中查询查询哈希,然后在扩展事件会话中使用该查询哈希来捕获相关详细信息。
这应该让你到那里:
在上面的查询中,我有
LIKE '%some-pertinent-SQL%'
- 这会限制查询结果以匹配您要查找的目标 - 您需要将 替换为some-pertinent-SQL
目标查询的唯一部分。query_hash
在扩展事件会话定义中使用上面返回的列中的值:将 替换
0x00000000
为实际的查询哈希值。启动扩展事件会话:
右键单击对象资源管理器中的扩展事件会话,以查看有关客户端主机名、用户名等的详细信息,以便查询发生时。
为了对此进行测试,我在我的 SQL Server 2016 测试实例上执行了以下代码:
在这里,我将在 QueryStoreTest 数据库中创建几个对象和一个测试查询:
在这里,我将从查询存储中获取查询哈希:
结果:
现在,我将创建扩展事件会话:
并开始会话:
现在,如果我运行测试查询并查看会话中的实时数据,我会看到:
清理: