日期:2014-05-18  浏览次数:20670 次

如何得到sqlserver的执行计划
大家好,我现在使用sqlserver遇到了一个问题,请大家帮忙解决阿。问题是这样的,在oracle中,当我们要查看执行计划的时候,一般都是先建立plan_table表,然后使用“excute   plan   +   sql语句”这个命令,然后再查询plan_table表得到执行计划的结果,但是在sqlserver中只有显示执行计划的功能,我想知道,怎么才能通过sql语句查询得到sqlserver中执行计划,请大家帮忙啊,先谢谢了。

------解决方案--------------------
不知道这个对不对。。。

如何在客户端获得维护计划日志
如何判断维护计划的状态,是否已停止
如何在客户端启动SQLServer代理
---------------------------

--如何在客户端启动SQLServer代理
exec master..xp_cmdshell 'net start SQLSERVERAGENT '
---------------------------

查询系统表,可以得到维护计划的状态:
select * from msdb..sysdbmaintplan_history


关于此系统表返回信息的说明:
sysdbmaintplan_history
执行的每个维护计划操作在表中占一行。该表存储在 msdb 数据库中。

列名 数据类型 描述
sequence_id int 维护计划执行的历史记录序列。
plan_id uniqueidentifier 维护计划 ID。
plan_name sysname 维护计划名称。
database_name sysname 与维护计划相关联的数据库名称。
server_name sysname 系统名称。
activity nvarchar(128) 维护计划执行的活动(例如备份事务日志等)。
succeeded bit 0 = 成功
1 = 失败
end_time datetime 完成操作的时间。
duration int 完成维护计划操作所需的时间。
start_time datetime 操作开始的时间。
error_number int 失败时报告的错误号。
message nvarchar(512) sqlmaint 生成的消息。

------解决方案--------------------
看看这个:)
http://community.csdn.net/Expert/topic/4712/4712279.xml?temp=.7417261
------解决方案--------------------
Oracle10g之前要求用户自己建立plan_table,才能使用set autotrace on等查看执行计划的功能。然后执行计划缓存通过plan_table再展示给用户。可以说Oracle10g之前的要求用户建立plan_table的方式是比较麻烦的。plan_table只是起到缓存的作用,每次查看新的SQL语句都会被刷新,对其查询有意义吗?!

SQL Server和Oracle的思路是不同的。由于SQL Server的UI做的好,一般都是使用图形方式展现执行计划。如果SQL比较复杂,一般使用:
set showplan_all {on | off}

set showplan_text { on | off }

来查看文本执行计划(最类似Oracle,这和Oracle的set autotrace on是基本相同的)。如果需要保存执行计划,需要手工操作。如果想自动实现这一过程,可以考虑使用SQL Server Profiler(SQL Server的跟踪功能)来自动记录执行计划事件。


rookie_one(流氓会武术,谁都挡不住)说的是数据库的维护计划。用作业(job)自动执行的一些数据库维护功能。和你的问题不是一个概念。