从存储过程执行SSIS包是超时的

时间:2014-12-16 00:46:59

标签: stored-procedures ssis timeout

我有一个难题,我很难过,希望你们都能帮忙。

以下是我的方案:我通过Web界面将数据加载到我们的数据库中。首先,我将文件上传到SQL框,然后我调用脚本,该脚本将数据提取并加载到SQL中。

我最近改变了这个过程,现在,我不是从Web应用程序中执行包,而是调用存储过程来执行脚本。

以下是我的代码的核心:

CREATE PROCEDURE [dbo].[ExecuteSsisPackage]
@Package NVARCHAR(100),
AS
BEGIN

SET NOCOUNT ON;
DECLARE @executionID BIGINT
EXEC SSISDB.catalog.create_execution
    @folder_name = 'Imports', -- nvarchar(128)
    @project_name = 'DataImports, -- nvarchar(128)
    @package_name = @Package, -- nvarchar(260)
    @use32bitruntime = 1, -- bit
    @execution_id = @executionID OUTPUT -- bigint
SELECT @executionId

EXEC [SSISDB].[catalog].[set_execution_parameter_value] @executionId, 50, N'SYNCHRONIZED', @parameter_value = 1 -- turn on synchronization
EXEC ssisdb.catalog.start_execution @executionID;
RETURN (@executionID)
END

这是奇怪的部分:当我从管理工作室运行存储过程时,它执行正常。但是,当我从Web应用程序执行此操作时,它会超时。但是,如果我关闭同步它通过Web应用程序执行得很好。禁用同步的问题是我需要在加载数据后从数据中提取一些摘要信息。

我甚至尝试从我发现的帖子中滚动自己的“同步”:

DECLARE @status AS BIGINT = 1;
WHILE(@status = 1 OR @status = 2 OR @status = 5 OR @status= 8)
BEGIN
    PRINT 'Status: ' + CAST(@status AS VARCHAR(10))
    PRINT 'waiting 2 seconds for Package to finish'
    WAITFOR DELAY '00:00:2';

    SET @status = (SELECT [Status] FROM SSISDB.[catalog].[executions]
            WHERE execution_id = @executionID);
END

PRINT 'Exit Status: ' + CAST(@status AS VARCHAR(10))

这也超时了。我做了一些挖掘,发现当SP从Web(但不是管理工作室)执行时,有一个锁:LCK_M_S和wait_resource是:KEY:9:72057594041532416(d28bcaafb8df)。同样,这仅在从Web应用程序执行SP时发生。

更多的挖掘出土了锁的罪魁祸首。它是SSISDB.internal.operations表的PK_Operations键。这是一个难题。任何想法为什么只能通过网络发生这种情况并且当它同步时才开启?

0 个答案:

没有答案