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

标签 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. 确定您的 Java session ID。从 java 打印 @@SPID 或使用 SSMS 并查看 sys.dm_exec_sessions和/或 sys.dm_exec_connections用于您的 Java 客户端 session (它可以通过 program_namehost_process_idclient_net_address 等标识)。
  2. 执行你的声明。找sys.dm_exec_requests对于在 1 处找到的 session_id
  3. 使用 sys.dm_exec_query_plan 提取计划来自在 2 处找到的 plan_handle
  4. 将计划保存为 .sqlplan 文件并在 SSMS 中打开

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

关于java - 是否可以在 sql server 上使用 jdbc 获取查询计划?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1791494/

相关文章:

java - Android:当url包含http时,在设置WebViewCore之前不支持removeMessages(int what = 107)

java - Bean创建异常: No factory method found

java - 检查 youtube-api 中视频对象中是否存在嵌套键以避免 NULLPOINTEREXCEPTION

sql-server - T-SQL 中的空语句

sql - SQL 第 2 部分中按中断系列升序/降序对结果最小值/最大值进行分组

java - 使用 SQL Server 2005/2008 的最新 jdbc 驱动程序时,准备好的语句、 View 和存储过程的性能比较如何?

java - 使用哪个版本的 AES?

sql - 如何从连接表 SQL 的列中排除另一个值

sql-server - 数据库优化顾问建议创建现有索引

sql-server - 将数据库转换为sql脚本的技术?