VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 779|回复: 4

如何得到sqlserver的执行计划

[复制链接]

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-3-17 10:00:01 | 显示全部楼层 |阅读模式
大家好,我现在使用sqlserver遇到了一个问题,请大家帮忙解决阿。问题是这样的,在oracle中,当我们要查看执行计划的时候,一般都是先建立plan_table表,然后使用“excute plan + sql语句”这个命令,然后再查询plan_table表得到执行计划的结果,但是在sqlserver中只有显示执行计划的功能,我想知道,怎么才能通过sql语句查询得到sqlserver中执行计划,请大家帮忙啊,先谢谢了。
回复

使用道具 举报

0

主题

40

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-6-20 20:45:01 | 显示全部楼层
不知道这个对不对。。。

如何在客户端获得维护计划日志  
如何判断维护计划的状态,是否已停止  
如何在客户端启动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  生成的消息。   
回复

使用道具 举报

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-7-11 08:45:01 | 显示全部楼层
真是太谢谢楼上了,我还有一个问题,就是生成一个sql语句的维护计划的命令是什么啊
回复

使用道具 举报

1

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-7-11 09:15:02 | 显示全部楼层
能否举个例子阿

exec  master..xp_cmdshell  'net  start  SQLSERVERAGENT'  

不能执行阿,我有点不太明白
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-20 13:30:01 | 显示全部楼层
Oracle之前要求用户自己建立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的跟踪功能)来自动记录执行计划事件。


hiqwolfzzh说的是数据库的维护计划。用作业(job)自动执行的一些数据库维护功能。和你的问题不是一个概念。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表