#sql-server #ssis #sql-server-2017
#sql-server #ssis #sql-server-2017
Вопрос:
Я просматриваю каталог проекта SSIS DB, чтобы найти начальную и конечную дату-время для каждого пакета SSIS, вызываемого из основного пакета. Есть ли какой-либо запрос для выполнения этого?
После просмотра [internal].[executions] и SSISDB.catalog.operation_messages и т.Д
Выполнение этого запроса не работает, если есть главный пакет, вызывающий дочерние пакеты.
select start_time,end_time,*
from catalog.executions cc order by cc.start_time desc
Я пытаюсь найти время начала и окончания для каждого дочернего пакета.
Ответ №1:
CATALOG.EXECUTABLE_STATISTICS
DMV регистрирует статистику выполнения компонентов в пакете, включая задачи выполнения пакета. В столбцах START_TIME
и END_TIME
хранится время начала и завершения выполнения компонента. EXECUTION_DURATION
Столбец содержит время, которое потребовалось исполняемому файлу, в данном случае дочерним пакетам, для выполнения в миллисекундах. Это, конечно, может быть преобразовано в секунды, минуты и т.д. В зависимости от того, что вам нужно. Хотя в этом файле есть столбец для пути выполнения компонента в родительском пакете, в нем нет столбца для прямого имени компонента, поэтому он CATALOG.EXECUTABLES
включен для EXECUTABLE_NAME
, и этот DMV можно опустить, если вместо этого вы хотите просмотреть только путь выполнения ( EXECUTION_PATH
столбец). CATALOG.EXECUTIONS
содержит столбцы для папки и названия проекта, и вы можете присоединиться к ним, чтобы применить фильтры для конкретного проекта и папки, в которых находится пакет. Вы также можете применить фильтр к EXECUTION_ID
столбцу, чтобы просматривать сведения только о конкретном выполнении. Выполнение пакета на базовом уровне ведения журнала с разрешением регистрировать детали выполнения для компонентов.
SELECT
EX.FOLDER_NAME,
EX.PROJECT_NAME,
E.EXECUTABLE_NAME,
EX.PACKAGE_NAME,
ES.START_TIME AS ComponentStartTime,
ES.END_TIME AS ComponentEndTime,
EX.start_time AS PackageStartTime,
EX.end_time AS PackageEndTime,
ES.EXECUTION_DURATION AS ComponentExecutionTimeInMilliseconds
FROM SSISDB.CATALOG.EXECUTIONS EX
INNER JOIN SSISDB.CATALOG.EXECUTABLES E on EX.EXECUTION_ID = E.EXECUTION_ID
INNER JOIN SSISDB.CATALOG.EXECUTABLE_STATISTICS ES on E.EXECUTABLE_ID = ES.EXECUTABLE_ID AND EX.EXECUTION_ID = ES.EXECUTION_ID
--PACKAGE_NAME- parent package
WHERE E.PACKAGE_NAME = 'Package Name.dtsx' AND EX.PROJECT_NAME = 'Project Name'
AND EX.FOLDER_NAME = 'Folder Name'
Комментарии:
1. Какие дубликаты вы получаете? Я запустил это перед публикацией, и никаких проблем не возникло. Являются ли дубликаты, которые вы видите, строками для всех выполнений? Вы можете использовать столбец EXECUTION_ID для проверки наличия конкретного экземпляра выполнения или самого последнего экземпляра с MAX( EXECUTION_ID).
2. возможно, с min и max, кажется, работает лучше, ВЫБЕРИТЕ ex.execution_id, E.PACKAGE_NAME, min (Например,start_time) В КАЧЕСТВЕ времени запуска пакета, max (например,end_time) В КАЧЕСТВЕ времени завершения пакета Из SSISDB. CATALOG.EXECUTIONS EX ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ SSISDB. КАТАЛОГ.ИСПОЛНЯЕМЫЕ ФАЙЛЫ, НАПРИМЕР,EXECUTION_ID = E.EXECUTION_ID ВНУТРЕННЕГО СОЕДИНЕНИЯ SSISDB. CATALOG.EXECUTABLE_STATISTICS зависит от E.EXECUTABLE_ID = ES.EXECUTABLE_ID —PACKAGE_NAME-родительский пакет, ГДЕ E.PACKAGE_NAME = » группировать по ex.execution_id, например.package_name упорядочивать по ex.execution_id, например.package_name
3. Без каких-либо фильтров для конкретных экземпляров выполнения (EXECUTION_ID) запрос вернет строки для всех выполнений. Под MAX(EXECUTION_ID) для самого последнего я подразумевал использование этого в качестве фильтра в предложении WHERE, например zappysys.com/blog /…
4. вам нужно добавить это при последнем объединении И ПРИМЕР.EXECUTION_ID = ES.EXECUTION_ID
5. @JoeSmith это верно, я, должно быть, не включил это при публикации. Моя ошибка, но хороший улов. Я добавил эту часть к своему ответу, однако, пожалуйста, не помечайте ее как принятую, поскольку она была изначально отключена, и вы упомянули об этом.