如何衡量程序包执行的持续时间?

时间:2017-06-08 06:40:42

标签: sql-server stored-procedures ssis

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

获得作业开始时间很简单 - 只需在调用作业之前保存当前时间即可。

我怎样才能结束时间?我可以使用@endTime = GETDATE()吗?开始工作是否等待它结束?

一般来说,SQL程序中的调用是真的吗?

编辑: 正如人们所说,我想使用此代码调用SSIS作业,我发现here

 declare @execution_id bigint
 exec ssisdb.catalog.create_execution 
 @folder_name = 'mssqltips'
 ,@project_name = 'exec-ssis-stored-proc-ssis-sample'
 ,@package_name = 'Sample.dtsx'
 ,@execution_id = @execution_id output
 exec ssisdb.catalog.start_execution @execution_id

2 个答案:

答案 0 :(得分:1)

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

如果以包的形式运行它,它可以同步或异步运行。

如果它处于异步模式,SP只会启动SSIS包并且不会等待。

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

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

https://docs.microsoft.com/en-us/sql/integration-services/system-stored-procedures/catalog-set-execution-parameter-value-ssisdb-database

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

答案 1 :(得分:1)

SSIS已记录包执行持续时间和事件,包括步骤持续时间。您不需要使用LDFLAGS=-static

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

GETDATE()

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

用于历史数据