SQL Server 2000中当前运行的SQL语句的执行计划

时间:2008-12-10 16:26:03

标签: sql-server sql-server-2000

有没有办法让DBA查看SQL Server 2000中长时间运行的查询的执行计划?我知道如何使用fn_get_sql()运行SQL。是的,从理论上讲,如果打开一个新连接并将环境标志设置为相同,它应该为SQL生成相同的计划。但是,我在数据仓库环境中,并且此查询运行了12个小时,其间存在数据加载,因此无法保证新计划与旧计划匹配。我只想知道服务器正在做什么。

不,我当然不会杀死当前正在运行的语句,除非我能看到该计划,并确定我可以通过索引和联接提示做得更好。

更新: 我感觉如此接近,但我仍然认为可以做到。绝对可以在2K5及更高版本中完成。如果查看syscacheobjects虚拟表,则每个缓存计划都有对象ID。你可以在这些id上调用sp_OA *方法,但是如果不了解对象模型(这是专有的),我就无法到达任何地方。

3 个答案:

答案 0 :(得分:1)

不,你不能。您可以做的最好的事情是在查询过程中运行DBCC INPUTBUFFER并查看正在执行的最后一个语句是什么。然后,您可以在查询分析器中运行它并获得执行计划。

答案 1 :(得分:0)

我认为你不能做这样的事情,它需要用原始查询提交给服务器:

http://msdn.microsoft.com/en-us/library/aa178303(SQL.80).aspx

您可以加载查询并获取估算的执行计划。

答案 2 :(得分:0)

也许......

运行探查器,然后展开“性能”事件节点。 选择一个SHOWPLAN选项。

希望您能够捕获执行结束。 我知道你可以记录查询计划,但我不知道它是否适用于这种情况。

我没有SQL 2k分析器,只有2k5,无法测试或查看选项。