5

我正在使用 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 **/
4

1 回答 1

7
  1. 确定您的 Java 会话 ID。从 java打印@@SPID或使用 SSMS 并查看sys.dm_exec_sessions和/或sys.dm_exec_connections查看您的 Java 客户端会话(可以通过program_namehost_process_id等标识client_net_address)。
  2. 执行你的声明。寻找在sys.dm_exec_requests1session_id找到的。
  3. sys.dm_exec_query_plan使用从 2 中找到的计划提取计划plan_handle
  4. 将计划保存为 .sqlplan 文件并在 SSMS 中打开

或者,您可以使用 Profiler,将 Profiler 附加到服务器并捕获Showplan XML事件。

于 2009-11-24T17:54:46.340 回答