Sql server 如何度量包执行的持续时间?

Sql server 如何度量包执行的持续时间?,sql-server,stored-procedures,ssis,Sql Server,Stored Procedures,Ssis,我有一个SSIS作业,我想从一个过程中运行它,然后使用作业开始和作业结束日期执行select语句 获取作业开始时间很容易-只需在调用作业之前保存当前时间 蒂姆,我怎样才能结束比赛?我可以使用@endTime=GETDATE()?开始工作是否要等到它结束 SQL过程内部的调用通常是真的吗 编辑: 正如人们所问,我想使用以下代码调用SSIS作业,我发现: 这取决于如何通过SP运行SSIS。它是sql代理作业还是包执行(目录) 如果将其作为包运行,则可以同步或异步运行 如果处于异步模式,SP只启动SS

我有一个SSIS作业,我想从一个过程中运行它,然后使用作业开始和作业结束日期执行select语句

获取作业开始时间很容易-只需在调用作业之前保存当前时间

蒂姆,我怎样才能结束比赛?我可以使用
@endTime=GETDATE()
?开始工作是否要等到它结束

SQL过程内部的调用通常是真的吗

编辑: 正如人们所问,我想使用以下代码调用SSIS作业,我发现:


这取决于如何通过SP运行SSIS。它是sql代理作业还是包执行(目录)

如果将其作为包运行,则可以同步或异步运行

如果处于异步模式,SP只启动SSIS包,不等待

如果它处于同步模式,它将等待

模式取决于同步参数。此参数应在执行开始前设置,请参阅下面的链接如何设置


如果从SP运行SQL作业,并且该作业执行SSIS包,则SP不会等待,它只会激活SQL代理作业。

SSIS已记录包执行持续时间和事件,包括步骤持续时间。您不需要使用
GETDATE()

您可以查询SSIDB数据库的视图以检索执行状态、开始时间和结束时间,例如:

select status, start_time, end_time,datediff(s,start_time,end_time) as duration
from catalog.executions
where execution_id = @execution_id


对于历史数据

来说,问题与存储过程无关,而是关于作业。没有
作业运行
存储过程,只有作业启动过程。它启动作业,但不等待作业完成。可能他指的是使用dtsx.exe调用xp_cmdshell?代理提供作业状态、运行历史记录和统计信息。没有理由使用
GETDATE()
来查找一个作业需要多长时间。使用或查询table@Xyzk,你能精确地说出你想如何“从程序中运行”吗?@PanagiotisKanavos我明白你的意思,我会调查这些选项。尽管如此,我仍然很好奇是否可以使用这个解决方案(即使它不是一个很好的解决方案),我知道,但是Xyzk在示例中提到了包,而不是JOBOP,它询问如何度量执行的持续时间。无论包是如何启动的,这都可以从执行历史记录中获得。实际上OP有多个问题,其中之一是“启动作业是否等待它结束?”然后是包执行的示例。这真让人困惑。。。我明白:)我认为这个答案应该和我的答案结合起来。OP希望运行SSI并从同一SP获取执行详细信息。如果它是sql代理作业,则SP应该有一些while循环,带有延迟,并带有在作业停止时完成的条件。如果它是一个包,那么看看我的答案,OP只需要将GETDATE()与sync包一起使用execution@Anton实际持续时间已可用时,不需要使用
GETDATE()
。通常,当您可以访问历史执行数据时,您不再需要等待执行完成,只需在需要时读取历史视图。如果OP希望在执行后发送电子邮件,等待将非常有用。@PanagiotisKanavos我没有提到这一点,因为我想避免添加不必要的信息,但我确实希望在SSIS完成后执行一些基本操作。@PanagiotisKanavos,历史数据在运行时可能不可用,因为包已启动但尚未完成。因此,如果SP需要在SSIS执行后立即执行某些操作,则需要等待SSIS完成。等待机制取决于执行方法(我在回答中提到过)。包完成后,GETDATE()比从执行历史记录中获取统计数据快得多,也简单得多,但是如果需要精确的时间,执行历史记录会更好。
select status, start_time, end_time,datediff(s,start_time,end_time) as duration
from catalog.executions
where execution_id = @execution_id
select status, start_time, end_time, datediff(s,start_time,end_time) duration
from catalog.executions
where project_name = 'exec-ssis-stored-proc-ssis-sample'
      and  package_name = 'Sample.dtsx'
order by execution_id