Friday, February 8, 2013

How to determine the rows per millisecond processed by a data flow

If you are doing system testing, and know how many rows are being processed.  The following is a simple piece of code that will look at the SSIS log and give a number on the process.

@PackageSourceID is the ID of the package being executed.
@listsize is the size of the record set being processed.

The package must have logging enabled, and the package must have OnPreExecute and OnPostExecute logged.


DECLARE @PackageSourceID VARCHAR(255)

SET @PackageSourceID = '2142F02C-907D-47A0-B3A5-E0BAC8CB5AEC'

DECLARE @listsize INT

SET @listsize = 1000000;

WITH cte_startend
     AS (SELECT *
         FROM   sysssislog
         WHERE  executionid IN (SELECT executionid
                                FROM   sysssislog
                                WHERE  sourceid = @PackageSourceID)
        --where executionid = @ExecutionID
        ),
     preexecute
     AS (SELECT *
         FROM   cte_startend a
         WHERE  event = 'OnPreExecute'),
     postexecute
     AS (SELECT *
         FROM   cte_startend a
         WHERE  event = 'OnPostExecute'),
     executetime
     AS (SELECT Datediff (ms, pe.starttime, poe.endtime) AS executetime,
                pe.id,
                pe.source,
                pe.starttime,
                pe.endtime,
                pe.sourceid,
                pe.executionid
         FROM   preexecute pe
                JOIN postexecute poe
                  ON pe.sourceid = poe.sourceid
                     AND pe.executionid = poe.executionid
                     and pe.sourceid not in (@PackageSourceID)
)
--@listsize
SELECT executionid,
       @listsize / executetime AS rowsperms,
       *       
FROM   executetime et
ORDER  BY et.executionid DESC,
          @listsize / executetime DESC

No comments:

Post a Comment