MHe*_*eld 2 sql-server-2016 query-store
我在数据库上启用了查询存储。我有一个要跟踪的特定查询。我有很多关于 sp_BlitzCache 查询的详细信息(如 SQL 文本、SQL 句柄、SQL 哈希、计划缓存句柄/哈希等)。
我是否可以使用来自 sp_BlitzCache 的信息搜索查询存储以跟踪那里的查询?我想强制执行特定的执行计划,因为查询会遇到参数嗅探问题。
Pet*_*ier 10
用户界面超级不友好,但您也可以直接从“ Tracked Queries”仪表板搜索查询文本。鉴于我的垃圾数据库中只有 2 个系统查询...
select
query_text_id,
left(query_sql_text,50) as query_sql_text
from sys.query_store_query_text
Run Code Online (Sandbox Code Playgroud)
...显示...
+---------------+----------------------------------------------------+
| query_text_id | query_sql_text |
+---------------+----------------------------------------------------+
| 1 | (@_msparam_0 nvarchar(4000),@_msparam_1 nvarchar(4 |
| 2 | SELECT db.name as HasMemoryOptimizedObjects from m |
+---------------+----------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
..我可以点击“追踪查询”搜索框中的“放大镜”图标...
这将弹出以下输入表单...
如果您在搜索栏中输入要搜索的查询测试(屏幕截图中的红色框),然后按回车键或单击放大镜图标(蓝色框),您可以浏览查询ID、查询文本ID和查询来自内置 UI 的文本(尽管可能访问起来不友好)。
举例来说,您可以在下面的屏幕截图中看到我搜索了字母“a”并返回了两个查询...
...在下一个屏幕截图中,我搜索了更具选择性的字符串“HasMemoryOptimizedObjects”,它仅返回匹配的查询文本
一种方法是直接查询查询存储视图以获取您从计划缓存中获得的信息:
SELECT
qsq.query_id,
qsq.last_execution_time,
qsqt.query_sql_text
FROM sys.query_store_query qsq
INNER JOIN sys.query_store_query_text qsqt
ON qsq.query_text_id = qsqt.query_text_id
WHERE
qsqt.query_sql_text LIKE '%your query text%';
Run Code Online (Sandbox Code Playgroud)
该sys.query_store_query表还有一些其他字段(query_hash、last_compile_batch_sql_handle、statement_sql_handle等),它们可能会更可靠地找到您要查找的查询。
基本上,这一点是在查询存储中找到“查询 id”,因为您需要它来找到它的计划并强制执行一个。
掌握了这些信息query_id后,您可以转到 SSMS 中的用户界面并使用“跟踪查询”节点查找查询:
从那里你可以点击你想要的计划,然后点击“强制计划”来强制它:
| 归档时间: |
|
| 查看次数: |
1963 次 |
| 最近记录: |