我正在使用 JTDS 驱动程序,我想确保我的 java 客户端接收到与我在 Mgmt studio 中执行 SQL 时相同的查询计划,有没有办法获取查询计划(最好是 xml 格式)?
基本上,我想要与
相同的格式输出set showplan_xml on
在管理工作室。有什么想法吗?
获取 session_id 计划的一些代码
SELECT usecounts, cacheobjtype,
objtype, [text], query_plan
FROM sys.dm_exec_requests req, sys.dm_exec_cached_plans P
CROSS APPLY
sys.dm_exec_sql_text(plan_handle)
CROSS APPLY
sys.dm_exec_query_plan(plan_handle)
WHERE cacheobjtype = 'Compiled Plan'
AND [text] NOT LIKE '%sys.dm_%'
--and text like '%sp%reassign%'
and p.plan_handle = req.plan_handle
and req.session_id = 70 /** <-- your sesssion_id here **/
最佳答案
- 确定您的 Java session ID。从 java 打印
@@SPID
或使用 SSMS 并查看sys.dm_exec_sessions
和/或sys.dm_exec_connections
用于您的 Java 客户端 session (它可以通过program_name
、host_process_id
、client_net_address
等标识)。 - 执行你的声明。找
sys.dm_exec_requests
对于在 1 处找到的session_id
。 - 使用
sys.dm_exec_query_plan
提取计划来自在 2 处找到的plan_handle
。 - 将计划保存为 .sqlplan 文件并在 SSMS 中打开
或者,您可以使用探查器,将探查器附加到服务器并捕获 Showplan XML事件。
关于java - 是否可以在 sql server 上使用 jdbc 获取查询计划?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1791494/