是否可以在sql server上使用jdbc获取查询计划?

时间:2009-11-24 17:07:41

标签: java sql-server sql-server-2005 jdbc jtds

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

1 个答案:

答案 0 :(得分:6)

  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_requests中查找1中找到的session_id
  3. 使用plan_handle在{2}找到的{{1}}提取计划。
  4. 将计划另存为.sqlplan文件并在SSMS中打开
  5. 或者,您可以使用Profiler,将探查器附加到服务器并捕获sys.dm_exec_query_plan事件。