Поделиться через


Ведение журналов в службах Integration Services (SSIS)

Службы SQL Server Службы Integration Services содержат регистраторы, которые могут использоваться для реализации ведения журналов в пакетах, контейнерах и задачах. При ведении журнала можно записать текущие сведения о пакете, что поможет при каждом выполнении пакета проводить его аудит и устранять неисправности. Например, журнал может записать имя оператора, запускающего пакет, и время, в которое пакет был начат или завершен.

Вы можете настроить область ведения журнала на время выполнения пакета на сервере Службы Integration Services . Дополнительные сведения см. в разделе Включение ведения журналов при выполнении пакета на сервере служб SSIS.

Можно также включить ведение журнала при выполнении пакета из командной строки с помощью программы dtexec . Дополнительные сведения об аргументах командной строки, относящихся к ведению журналов, см. в разделе служебная программа dtexec.

Настройка ведения журналов в SQL Server Data Tools

Журналы ассоциируются с пакетами и настраиваются на уровне пакета. Каждая задача или контейнер пакета может вести журнал в любом журнале пакета. Можно включить ведение журналов задач и контейнеров пакета, даже если ведение журнала содержащего их пакета не включено. Например, можно включить ведение журнала задачи «Выполнение SQL», не включая ведение журнала ее родительского пакета. Пакет, контейнер и задача могут делать записи в нескольких журналах. Можно включить ведение журнала только для пакета либо для любой индивидуальной задачи или контейнера, содержащегося в пакете.

При добавлении журнала к пакету выберите регистратор и место расположения журнала. Регистратор указывает формат для журнальных данных: например, база данных служб SQL Server или текстовый файл.

Службы Integration Services включают следующие регистраторы.

  • Поставщики журналов текстовых файлов, которые ведут журнальные записи в текстовых файлах ASCII в формате значений, разделенных запятыми (CSV). По умолчанию для имени файла для данного регистратора используется расширение LOG.

  • Поставщик журнала Приложение SQL Server Profiler , который записывает трассировки, которые могут быть просмотрены с использованием приложения SQL Server Profiler. По умолчанию для имени файла данного регистратора используется расширение TRC.

    Примечание

    Нельзя использовать регистратор Приложение SQL Server Profiler в пакете, работающем в 64-разрядном режиме.

  • Поставщик журналов SQL Server, который записывает записи журнала в таблицу sysssislog в базе данных SQL Server.

  • Поставщик службы Windows «Журнал событий», который ведет журнальные записи в прикладном журнале службы Windows «Журнал событий» на локальном компьютере.

  • Поставщик журнала XML File, который записывает журнальные файлы в XML-файл. По умолчанию для имени файла данного регистратора используется расширение XML.

При добавлении регистратора к пакету или программной настройке ведения журнала для идентификации регистратора используйте или ProgID, или ClassID. Это делается вместо использования имен, которые конструктор служб Integration Services отображает в диалоговом окне Настройка журналов служб SSIS .

В следующей таблице перечислены идентификаторы ProgID и ClassID для регистраторов, содержащихся в службах Службы Integration Services , а также указано расположение журналов, в которые регистраторы записывают данные.

Регистратор ProgID: ClassID: Location
текстовый файл DTS.LogProviderTextFile {0A039101-ACC1-4E06-943F-279948323883} Используемый регистратором диспетчер подключения файлов определяет путь к текстовому файлу.
Приложение SQL Server Profiler DTS.LogProviderSQLProfiler {E93F6300-AE0C-4916-A7BF-A8D0CE12C77A} Используемый регистратором диспетчер подключения файлов определяет путь к текстовому файлу, необходимому для Приложение SQL Server Profiler.
SQL Server DTS.LogProviderSQLServer {94150B25-6AEB-4C0D-996D-D37D1C4FDEDA} Используемый регистратором диспетчер соединений с OLE DB определяет базу данных SQL Server , содержащую таблицу sysssislog с записями журнала.
Журнал событий Windows DTS.LogProviderEventLog {071CC8EB-C343-4CFF-8D58-564B92FCA3CF} Журнал приложений в средстве просмотра событий Windows содержит сведения о событиях служб Службы Integration Services .
XML-файл DTS.LogProviderXMLFile {440945A4-2A22-4F19-B577-EAF5FDDC5F7A} Используемый регистратором диспетчер соединения файлов определяет путь к XML-файлу.

Возможно также создание пользовательских регистраторов. Дополнительные сведения см. в разделе Creating a Custom Log Provider.

Регистраторы в пакете являются элементами коллекции регистраторов пакета. При создании пакета и реализации ведения журналов с использованием конструктора служб Integration Services вы можете видеть список элементов коллекции в папках Регистратор на вкладке Обозреватель пакетов конструктора служб Integration Services .

Настройте регистратор путем предоставления имени и описания для регистратора и указания диспетчера соединений, который используется данным регистратором. Регистратор SQL Server использует диспетчер соединений OLE DB. Регистраторы текстового файла, приложения Приложение SQL Server Profilerи XML-файла используют диспетчеры подключения файлов. Регистратор журнала событий Windows не использует диспетчер соединений, потому что он напрямую обращается к журналу регистрации событий Windows. Дополнительные сведения см. в разделах Диспетчер соединений OLE DB и диспетчер подключения файлов.

Настройка ведения журналов

Чтобы настроить ведение журнала для события или пользовательского сообщения, службы Службы Integration Services предоставляют схему общих записываемых данных для включения в записи журнала. Схема журнала служб Службы Integration Services определяет данные, которые можно сохранить в журнал. Можно выбрать элементы схемы журнала для каждой записи.

Пакету и его контейнерам и задачам не требуется производить запись одних и тех же данных, и задачи одного пакета или контейнера могут производить запись различных данных. Например, пакет может производить запись сведений об операторе при запуске, одна задача может производить запись об источнике ошибки, а другая задача может производить запись о времени этой ошибки. Если пакет и его задачи, а также контейнеры используют несколько журналов, то одни и те же данные записываются во все журналы.

Можно выбрать необходимый уровень ведения журналов, указав события и данные каждого события для записи. Можно обнаружить, что одни события предоставляют более полезные сведения, чем другие. Например, можно записывать в журнал не только имена компьютеров и операторов для события PreExecute , но и все доступные данные о событии Error .

Для предотвращения использования журналами больших объемов дискового пространства или во избежание избыточного ведения журналов, которое может уменьшить производительность, можно ограничить ведение журналов, выбрав отдельные события и элементы данных для записи. Например, можно настроить журнал на запись только даты и имени компьютера для каждой ошибки.

В конструкторе служб Integration Services можно определить параметры ведения журналов с помощью диалогового окна Настройка журналов служб SSIS .

Схема журнала

Следующая таблица описывает элементы схемы журнала.

Элемент Описание
Компьютер Имя компьютера, на котором произошло событие журнала.
Оператор Удостоверение пользователя, выполнившего запуск пакета.
SourceName Имя контейнера или задачи, где произошло событие журнала.
SourceID Уникальный идентификатор пакета контейнеров «цикл по элементам», «цикл по каждому элементу» или контейнера последовательности; или задача, в которой произошло событие журнала.
ExecutionID Идентификатор GUID экземпляра выполнения пакета.

Примечание. Запуск одного пакета может создать записи в журнале с разными значениями для элемента ExecutionID. Например, при запуске пакета в среде SQL Server Data Toolsна этапе проверки могут быть созданы записи в журнале с элементом ExecutionID, который соответствует среде SQL Server Data Tools. Однако на этапе выполнения могут быть созданы записи журнала с элементом ExecutionID, соответствующим файлу dtshost.exe. Другой пример, когда запускается пакет, содержащий задачи «Выполнение пакета», каждая из этих задач запускается в дочернем пакете. Эти дочерние пакеты могут создавать записи в журнале, имеющие отличные элементы ExecutionID от тех, что создаются в родительском пакете.
MessageText Сообщение, связанное с записью журнала.
DataBytes Байтовый массив, специфичный для записи журнала. Значение этого поля изменяется в зависимости от записи журнала.

В следующей таблице описываются три дополнительных элемента схемы журнала, которые недоступны во вкладке Подробные сведения диалогового окна Настройка журналов служб SSIS .

Элемент Description
StartTime Время начала работы контейнера или задачи.
EndTime Время прекращения работы контейнера или задачи.
DataCode Необязательное целочисленное значение, которое обычно содержит значение из перечисления DTSExecResult , показывающее результат выполнения контейнера или задачи:

0 — успешное завершение;

1 — неуспешное завершение;

2 — завершено;

3 — отменено.
Записи журнала

Службы Integration Services поддерживают записи журнала для стандартных событий и предоставляют пользовательские записи журнала для многих объектов служб Службы Integration Services . В конструкторе служб эти события и пользовательские записи журнала перечислены в диалоговом окне Настройка журналов служб SSIS Integration Services .

В следующей таблице описаны стандартные события, которые могут быть включены для записи при возникновении событий времени выполнения. Эти записи журнала относятся к исполняемым объектам, пакету, задачам и контейнерам, содержащимся в пакете. Имя записи журнала события совпадает с именем произошедшего события выполнения, послужившего причиной записи в журнал.

События Description
OnError Производит запись в журнал при возникновении ошибки.
OnExecStatusChanged Вносит запись журнала, если задача (не контейнер) приостанавливается или ее выполнение возобновляется во время отладки.
OnInformation Производит запись в журнал во время проверки подлинности и выполнения исполняемого объекта.
OnPostExecute Производит запись немедленно после окончания выполнения исполняемого объекта.
OnPostValidate Производит запись в журнал при завершении проверки подлинности исполняемого объекта.
OnPreExecute Производит запись сразу перед началом выполнения исполняемого объекта.
OnPreValidate Производит запись в журнал при начале проверки подлинности исполняемого объекта.
OnProgress Производит запись в журнал в процессе выполнения исполняемого объекта.
OnQueryCancel Производит запись в журнал при любом присоединении к обработке задачи в тот момент, когда возможна отмена ее выполнения.
OnTaskFailed Производит запись в журнал при возникновении ошибки задачи.
OnVariableValueChanged Производит запись в журнал при изменении значения переменной.
OnWarning Производит запись в журнал при возникновении предупреждения.
PipelineComponentTime Производит запись в журнал по каждой фазе проверки и выполнения каждого компонента потока данных. В записях журнала указывается время обработки каждой фазы.
Диагностика Вносит в журнал запись, содержащую диагностические сведения.

Например, возможно вносить запись в журнал до и после каждого вызова к внешнему поставщику данных. Дополнительные сведения см. в разделе Инструменты устранения неполадок при выполнении пакетов.

В пакете и во многих задачах есть пользовательские записи журнала, которые можно включить для ведения журнала. Например, задача "Отправка почты" предоставляет запись журнала SendMailTaskBegin , которая производит запись данных в начале выполнения задачи "Отправка почты", но перед тем, как задача осуществляет отправку почты. Дополнительные сведения см. в разделе Custom Messages for Logging.

Различие копий пакета

Данные журнала содержат имя и идентификатор GUID пакета, которому принадлежит запись журнала. Для создания копии пакета путем копирования существующего пакета имя и идентификатор GUID существующего пакета тоже копируются. Это приводит к появлению двух элементов с одинаковыми именами и идентификаторами GUID, что приводит к трудностям при выделении пакетов из данных журнала.

Чтобы устранить неоднозначность, следует обновить имя и идентификатор GUID новых пакетов. В SQL Server Data Tools (SSDT) можно повторно создать GUID в свойстве ID и обновить значение Name свойства в окно свойств. Можно также изменить имя и идентификатор GUID программно или с помощью команды dtutil . Дополнительные сведения см. в разделах Установка свойств пакета и Программа dtutil.

Параметры родительского ведения журналов

Часто параметры ведения журналов задач и контейнеров «цикл по элементам» и «цикл по каждому элементу», а также контейнеров последовательности соответствуют параметрам пакета или родительского контейнера. В этом случае можно настроить их для наследования настроек ведения журналов от родительского контейнера. Например, в контейнере «цикл по элементам», включающем задачу «Выполнение SQL», эта задача может использовать параметры ведения журналов, установленные для контейнера «цикл по элементам». Для использования родительских параметров ведения журналов установите для свойства контейнера LoggingMode значение UseParentSetting. Можно установить это свойство в окне Свойства среды SQL Server Data Tools (SSDT) или через диалоговое окно Настройка журналов служб SSIS в конструкторе служб Integration Services .

Шаблоны ведения журналов

В диалоговом окне Настройка журналов SSIS также можно создать и сохранить часто используемые параметры ведения журналов в качестве шаблонов, и затем использовать эти шаблоны во многих пакетах. Это облегчает применение согласованной стратегии ведения журналов многочисленных пакетов и изменения параметров ведения журналов пакетов путем обновления шаблонов с последующим их применением. Шаблоны хранятся в XML-файлах.

Настройка ведения журналов с помощью диалогового окна «Конфигурация журналов служб SSIS»

  1. Включите журналирование пакета и его задач. Журналирование может происходить на уровне пакета, контейнера или задачи. Можно указать различные журналы для пакетов, контейнеров и задач.

  2. Выберите регистратора и добавьте журнал пакета. Журналы могут быть созданы только на уровне пакета, а задача или контейнер должны использовать один из журналов, созданных для пакета. Каждый журнал связан с одним из следующих регистраторов: текстовый файл, Приложение SQL Server Profiler, SQL Server, журнал событий Windows или XML-файл. Дополнительные сведения см. в разделе Включение средств ведения журналов в SQL Server Data Tools.

  3. Выберите события и схему данных журнала для этих событий, запись о которых должна содержаться в журнале. Дополнительные сведения см. в разделе Настройка ведения журналов с помощью сохраненного файла конфигурации.

Настройка регистратора

Значения свойств можно задавать с помощью конструктора Integration Services или программными средствами.

Регистратор создается и настраивается как шаг в реализации регистрации в пакете. Дополнительные сведения см. в разделе Ведение журнала служб Integration Services.

Просмотреть и изменить свойства регистратора после его создания можно в окне «Свойства» среды SQL Server Data Tools (SSDT).

Дополнительные сведения о программной установке этих свойств см. в документации по классу LogProvider .

Ведение журналов для задач потока данных

Задача потока данных предоставляет много пользовательских записей журнала, которые можно использовать для мониторинга и настройки производительности. Например, можно отслеживать компоненты, вызывающие утечку памяти, или следить за скоростью запуска отдельного компонента. Список пользовательских записей журнала и образец их вывода см. в разделе Задача потока данных.

Использование события PipelineComponentTime

Возможно, самой полезной записью журнала является событие PipelineComponentTime. Эта запись журнала сообщает о времени в миллисекундах, которое каждый компонент потока данных тратит на каждом из пяти основных шагов обработки. В следующей таблице описываются эти шаги обработки. Службы Integration Services Разработчикам эти шаги будут знакомы как основные методы класса PipelineComponent.

Шаг Description
Проверить Компонент проверяется на допустимость значений свойств и параметров настройки.
PreExecute Компонент выполняет однократную обработку перед началом обработки строк данных.
PostExecute Компонент выполняет однократную обработку после обработки всех строк данных.
ProcessInput Компонент преобразования или назначения обрабатывает входящие строки данных, которые передает ему вышестоящий источник или преобразование.
PrimeOutput Компонент источника или преобразования заполняет буферы данных, которые должны передаваться в нижестоящий компонент преобразования или назначения.

При включении события PipelineComponentTime службы Службы Integration Services записывают в журнал одно сообщение для каждого шага обработки, выполненного каждым компонентом. Следующие записи журнала показывают подмножество сообщений, которое регистрирует образец пакета CalculatedColumns служб Службы Integration Services .

The component "Calculate LineItemTotalCost" (3522) spent 356 milliseconds in ProcessInput.

The component "Sum Quantity and LineItemTotalCost" (3619) spent 79 milliseconds in ProcessInput.

The component "Calculate Average Cost" (3662) spent 16 milliseconds in ProcessInput.

The component "Sort by ProductID" (3717) spent 125 milliseconds in ProcessInput.

The component "Load Data" (3773) spent 0 milliseconds in ProcessInput.

The component "Extract Data" (3869) spent 688 milliseconds in PrimeOutput filling buffers on output "OLE DB Source Output" (3879).

The component "Sum Quantity and LineItemTotalCost" (3619) spent 141 milliseconds in PrimeOutput filling buffers on output "Aggregate Output 1" (3621).

The component "Sort by ProductID" (3717) spent 16 milliseconds in PrimeOutput filling buffers on output "Sort Output" (3719).

Эти записи показывают, что задача потока данных затратила наибольшее время на следующие шаги, представленные ниже в убывающем порядке.

  • Источник OLE DB с именем «Извлечение данных» затратил 688 мс на загрузку данных.

  • Преобразование «Производный столбец» с именем «Вычисление LineItemTotalCost» затратил 356 мс на вычисление входящих строк.

  • Преобразование "Статистическая обработка" с именем "Сложение Quantity и LineItemTotalCost" затратило в общей сложности 220 мс (141 на шаге PrimeOutput и 79 на шаге ProcessInput) на вычисление и передачу данных следующему преобразованию.

В следующем списке приведены ссылки на разделы, в которых описывается выполнение задач, связанных с функцией ведения журналов.

Инструмент DTLoggedExec для полного и подробного ведения журнала (проект CodePlex)

См. также:

Просмотр записей журнала в окне "Регистрация событий"