我在数据库上启用了查询存储。我有一个要跟踪的特定查询。我有很多关于 sp_BlitzCache 查询的详细信息(如 SQL 文本、SQL 句柄、SQL 哈希、计划缓存句柄/哈希等)。
我可以使用 sp_BlitzCache 中的信息搜索查询存储以追踪那里的查询吗?我想强制执行特定的执行计划,因为查询遇到参数嗅探问题。
我在数据库上启用了查询存储。我有一个要跟踪的特定查询。我有很多关于 sp_BlitzCache 查询的详细信息(如 SQL 文本、SQL 句柄、SQL 哈希、计划缓存句柄/哈希等)。
我可以使用 sp_BlitzCache 中的信息搜索查询存储以追踪那里的查询吗?我想强制执行特定的执行计划,因为查询遇到参数嗅探问题。
一种方法是直接查询查询存储视图以获取您从计划缓存中获得的信息:
该
sys.query_store_query
表还有一些其他字段(query_hash
、last_compile_batch_sql_handle
、statement_sql_handle
等),它们可能会更可靠地找到您要查找的查询。基本上,这样做的目的是在查询存储中找到“查询 ID”,因为您需要它来找到它的计划并强制执行。
拿到
query_id
手后,您可以转到 SSMS 中的 UI 并使用“Tracked Queries”节点查找查询:从那里您可以单击所需的计划,然后单击“强制计划”以强制执行:
UI 超级不友好,但您也可以直接从“ Tracked Queries”仪表板搜索查询文本。鉴于我的垃圾数据库中只有 2 个系统查询...
...显示...
..我可以点击“追踪查询”搜索框中的“放大镜?”图标...
这将弹出以下输入表单...
如果您在搜索栏(屏幕截图中红色框内)输入您要搜索的查询测试,然后按回车或单击放大镜图标(蓝色框内),您可以浏览查询 ID、查询文本 ID 和查询来自内置 UI 的文本(虽然它可能不友好,但它可能难以访问)。
例如,您可以在下面的屏幕截图中看到我搜索了字母“a”并返回了两个查询......
...而在下一个屏幕截图中,我搜索了更具选择性的字符串“HasMemoryOptimizedObjects”,它只返回匹配的查询文本