Устранение неполадок в сборщике данных

В этом разделе рассматриваются следующие категории неполадок и их устранение.

  • Ситуации, которые могут привести к ошибке. К этой категории относятся ошибки объектной модели и ошибки времени выполнения.

  • Проблемы производительности. К этому классу относятся общие и специальные сценарии производительности.

  • Зависания системы. К этому классу относятся зависания вспомогательных компонентов во время сбора данных.

Ситуации, которые могут привести к ошибке

Ошибки могут возникать из-за объектной модели или во время выполнения.

Ошибки объектной модели

Модель объектов сборщика данных представляет собой управляемый API, позволяющий программно управлять свойствами сборщика данных и наборами сбора. Объектная модель — это оболочка для набора хранимых процедур и представлений, которая предоставляет механизм изменения конфигурации для сборщика данных. Дополнительные сведения см. в разделе Программирование сборщика данных.

Ошибки объектной модели могут возникать в одном из следующих компонентов модели.

  • Ошибка Transact-SQL возникает в хранимой процедуре или коде Transact-SQL, который вызывается из одной из хранимых процедур сборщика данных.

  • Ошибка Transact-SQL возникает непосредственно в хранимой процедуре сборщика данных.

  • Управляемое исключение возникает непосредственно в объектной модели.

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

Сообщение об ошибке

Код ошибки

Описание

Не удается обновить столбцы name, target, proxy_id или collection_mode в активном наборе сбора "%s". Остановите набор сбора и повторите попытку обновления.

14669

Была предпринята попытка обновить активный набор сбора. Чтобы провести любое обновление такого типа, необходимо остановить набор сбора. Когда набор сбора активен, можно изменить только расписание передачи.

Невозможно удалить активный набор сбора "%s". Остановите набор сбора и повторите попытку удаления.

14670

Попытка удалить выполняющийся набор сбора.

Невозможно обновить имя или параметры элемента сбора "%s" в активном наборе сбора "%s". Остановите набор сбора и повторите попытку обновления.

14671

Попытка обновить элемент сбора в выполняющемся наборе сбора.

Невозможно удалить элемент сбора "%s" в активном наборе сбора "%s". Остановите набор сбора и повторите попытку удаления элемента сбора.

14672

Попытка удалить элемент сбора в выполняющемся наборе сбора.

Невозможно удалить тип сборщика "%s". Удалите все элементы сбора, связанные с этим типом сборщика, и повторите попытку его удаления.

14673

Попытка удалить тип сборщика, у которого есть связанные элементы сбора.

Невозможно загрузить данные для неактивного набора сбора "%s". Запустите набор сбора и повторите попытку загрузки данных.

14674

Попытка загрузить данные, собранные набором сбора, который не запущен.

Невозможно обновить столбцы name, target, proxy_id, logging_level или collection_mode, или добавить элемент сбора в активный набор сбора "%s". Остановите набор сбора и повторите попытку обновления.

14675

Попытка обновить запущенный набор сбора.

У пользователя нет разрешения на изменение "%s". Пользователь должен быть членом роли сборщика данных "%s".

14676

Пользователь попытался обновить свойство, которое может изменять только специальная роль сборщика данных.

У пользователя нет разрешений на выполнение этого действия. Пользователь должен быть членом роли сборщика данных "%s".

14677

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

Трассировка SQL Server с идентификатором %d была остановлена и закрыта внешним пользователем. Сборщиком SQL Server Trace будет предпринята попытка повторного создания трассировки.

14678

Трассировка, созданная и использовавшаяся сборщиком данных, была остановлена и закрыта не во время выполнения сборщика.

Указанное значение %s (%s) недопустимо в данном хранилище данных.

14679

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

Данная версия instmdw.sql должна выполняться только на сервере, где запущена версия SQL Server 2005 или более поздняя.

14680

Попытка установить хранилище управляющих данных на сервере, где запущена версия SQL Server 2000 или более ранняя.

Невозможно выполнить данную процедуру при отключенном сборщике. Активируйте сборщик и повторите попытку.

14681

Обнаружена попытка выполнить операцию, вызывающую конфликт с текущим состоянием сборщика.

Состояние набора сбора изменилось, но запуск или остановка не будут произведены до активации сборщика.

14682

Попытка запустить или остановить набор сбора, когда сборщик не активен.

Для набора сбора в моментальном снимке или в непрерывном режиме требуется расписание.

14683

Создайте или обновите набор сбора в моментальном снимке или непрерывном режиме без указания расписания.

Перехвачена ошибка#: %d, уровень: %d, состояние: %d, в процедуре: %s, строка: %d, с сообщением: %s

14684

В компоненте сборщика данных возникла общая ошибка. Она была перехвачена в блоке catch и выдана снова.

Недопустимая операция. Набор сбора с идентификатором %d в данный момент находится в состоянии «не выполняется».

14685

Вызов процедуры sp_syscollector_create_set_queue_and_service с запросом набора с состоянием is_running равным 0.

Параметры MDWInstance и MDWDatabase хранилища конфигураций не могут принимать значение NULL.

14686

Строка соединения для хранилища управляющих данных имеет значение NULL для параметра MDWInstance или MDWDatabase.

Недопустимое значение (%d) для параметра @cache_window. Допустимы следующие значения: -1 (кэшировать все передаваемые данные из предыдущих ошибок передачи), 0 (не выполнять кэширование передаваемых данных), N (кэшировать данные из N предыдущих ошибок передачи, где N >= 1)

14687

Попытка установить значение параметра CacheWindow хранилища конфигураций сборщика меньше -1.

Набор сбора не может быть запущен при остановленном агенте SQL Server. Запустите агент SQL Server.

14688

Попытка запустить набор сбора при выключенном агенте SQL Server.

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

14689

Попытка запустить набор сбора при ненастроенном хранилище управляющих данных.

Невозможно выполнить данную процедуру при включенном сборщике. Отключите сборщик и повторите попытку.

14690

Обнаружена попытка выполнить операцию, вызывающую конфликт с текущим состоянием сборщика.

Сборщик не может находиться в состоянии NULL. Это может свидетельствовать о внутреннем повреждении данных конфигурации сборщика.

14691

При вызове процедуры sp_syscollector_verify_collector_state обнаружен параметр CollectorEnabled со значением NULL. Это может свидетельствовать о внутреннем повреждении данных конфигурации сборщика.

Ошибки времени выполнения

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

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

  • Поток управления пакета SSIS. Эти ошибки записываются в таблицы журнала SSIS в базе данных msdb (msdb.dbo.sysssislog) и выводятся в таблицы журнала сборщика данных.

  • Исполняемый компонент сборщика данных (dcexec.exe). Эти ошибки записываются непосредственно в таблицы журнала сборщика данных.

Дополнительные сведения см. в разделе Ведение журнала сборщика данных.

Для получения сведений о состоянии ошибок времени выполнения рекомендуется использовать следующие способы.

Хранимые процедуры и представления Transact-SQL

Чтобы просмотреть состояние всех запущенных и остановленных в настоящий момент наборов сбора и пакетов, выполните следующий запрос.

use msdb
select * from syscollector_execution_log_full

Предыдущий запрос возвращает следующий результирующий набор:

Имя столбца

Описание

log_id

Уникальный идентификатор для выполнения каждого набора сбора. Используется для соединения этого представления с другими подробными журналами.

parent_log_id

Идентификатор родительского пакета или набора сбора. Имеет значение NULL для набора сбора. Идентификаторы соединяются в связь типа «родитель-потомок», что позволяет легко определить, какой пакет был запущен тем или иным набором сбора. Кроме того, это представление группирует записи журнала по связям типа «родители-потомки» и делает отступ перед именами пакетов, чтобы была ясно видна цепочка вызовов.

name

Имя набора сбора или пакета, который представляет эта запись журнала.

collection_mode

Активность набора сбора в момент записи — либо сбор, либо загрузка.

start_time

Время запуска набора сбора или пакета.

last_iteration_time

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

finish_time

Для завершенных пакетов и наборов сбора — время завершения.

duration

Время выполнения набора сбора или пакета в миллисекундах.

operator

Оператор, который запустил набор сбора или пакет.

status

Состояние набора сбора или пакета. В частности:

  • 0 - запущен

  • 1 - завершен

  • 2 - ошибка

failure_task

Если набор сбора или пакет завершили выполнение с ошибкой, этот параметр содержит имя задачи в пакете служб SSIS, которая вызвала ошибку.

package_execution_id

Ссылка на таблицу журнала служб SSIS.

collection_set_id

Ссылка на таблицу конфигурации сборщика данных.

ПримечаниеПримечание
В качестве фильтра можно использовать collection_set_id, чтобы выделить определенный набор сбора в журнале.

Дополнительные сведения см. в разделе syscollector_execution_log_full (Transact-SQL).

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

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

select * from fn_syscollector_get_execution_stats(@log_id)

Следующая функция возвращает фрагмент журнала служб SSIS (sysdtslog90), который соответствует идентификатору package_execution_id для пакета. Если пакет завершился сбоем, это лучший способ выяснить первопричину ошибки.

select * from fn_syscollector_get_execution_details(@log_id)

Отчеты о состоянии сборщика данных

Сведения, возвращенные в предыдущих запросах Transact-SQL, можно получить в журналах, предоставляемых в среде Среда SQL Server Management Studio. Дополнительные сведения см. в разделе Как просмотреть журналы набора данных.

Проблемы производительности

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

Во-первых, в таблицах журнала, описанных в предыдущем разделе, также представлены полезные сведения, которые можно использовать для решения проблем производительности.

Функция fn_syscollector_get_execution_stats возвращает следующие сведения.

Имя столбца

Описание

avg_row_count_in

Среднее количество строк, поступивших в задачи потока данных пакета.

min_row_count_in

Минимальное количество строк, поступивших в задачи потока данных пакета.

max_row_count_in

Максимальное количество строк, поступивших в задачи потока данных пакета.

avg_row_count_out

Среднее количество строк, вышедших из задач потока данных пакета.

min_row_count_out

Минимальное количество строк, вышедших из задач потока данных пакета.

max_row_count_out

Максимальное количество строк, вышедших из задач потока данных пакета.

avg_duration

Среднее время (в миллисекундах), затраченное компонентом потока данных пакета.

min_duration

Минимальное время (в миллисекундах), затраченное компонентом потока данных пакета.

max_duration

Максимальное время (в миллисекундах), затраченное компонентом потока данных пакета.

Вторым источником данных о производительности является таблица syscollector_execution_log_full, которая содержит данные о том, сколько времени выполнялся или выполняется набор сбора.

Наконец, для оценки проблем производительности можно использовать счетчики производительности. Стандартные счетчики процессов для экземпляров процесса сборщика данных (dcexec.exe) дают хорошие показатели использования системных ресурсов компонентом времени выполнения сборщика данных.

Типы проблем производительности

При выполнении сборщика данных наиболее вероятны следующие два типа проблем с производительностью:

  • сборщик данных потребляет слишком много системных ресурсов;

  • сборщик данных не успевает за загрузкой сбора.

Чрезмерное потребление системных ресурсов

Если анализ счетчиков производительности процесса показывает, что процессы dcexec.exe используют слишком много системных ресурсов, то следует выполнить следующие действия.

Сначала определите, есть один набор сбора, который использует большую часть ресурсов.

  • Чтобы выявить этот набор сбора, сопоставьте идентификатор процесса с идентификатором набора сбора в журнале syscollector_execution_log_full, а затем найдите набор сбора в таблице syscollector_collection_sets.

  • Определите, что собирает набор сбора. Выведите список всех элементов сбора, сгруппированных в наборе, с помощью следующего запроса:

    select * from syscollector_collection_set_items where collection_set_id = <id>
    
  • На основании сведений, полученных из предыдущего запроса, ответьте на следующие вопросы.

    • Не слишком ли много элементов сбора?

    • Есть ли один элемент сбора, который вызывает наибольшее число проблем?

    • Не собирается ли слишком много данных?

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

Во-вторых, определите, не является ли причиной проблемы число активных наборов сбора.

  • Узнайте, сколько наборов сбора определено в системе, можно с помощью следующего запроса:

    select count(*) from syscollector_collection_sets
    
  • Узнайте, сколько наборов сбора определено выполняется в данный момент, можно с помощью следующего запроса:

    select count(*) from syscollector_execution_log_full where parent_log_id is null and status = 1
    
  • Если проблемы с производительностью возникают периодически, проверьте, не связана ли проблема с каким-либо сбором или передачей. Причиной проблемы могут оказаться одинаковые расписания. Простым решением проблемы может стать изменение расписания работы сбора или расписания передачи.

Не удается успевать за загрузкой

Такая ситуация возникает только при длительном выполнении наборов сбора. Если частота сбора высока и требуется собирать большой объем данных, то пакет сбора, возможно, не может обрабатывать данные за время, выделенное на создание одного моментального снимка. Эту ситуацию можно выявить, сравнив столбцы в таблице журнала avg_duration и max_duration columns с частотой сбора, определенной для конкретного элемента сбора.

Если значение max_duration value больше частоты, то пакет сбора может не всегда успевать проводить сбор с установленной частотой. Если значение avg_duration больше частоты, то в пакете сбора будет постоянная проблема. В последнем случае необходимо уменьшить частоту или изменить элемент сбора, чтобы ограничить объем собираемых данных.

Зависания системы

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

Важно отличать действительное зависание от заданного поведения.

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

  • Возможно, пакет ожидает события, которое запустит действие сбора. В таком случае пакет будет ожидать события. Это не зависание.

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

  • Сначала определите идентификатор процесса dcexec.exe, соответствующий рассматриваемому набору сбора.

  • Затем проверьте, запущен ли процесс и использует ли он какие-либо ресурсы. Любой зависший процесс обычно использует 0% ресурсов ЦП и не использует дополнительную память. Процесс также может использовать большой процент ресурсов ЦП. В таком случае, возможно, процесс вошел в цикл и не может завершить работу.

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

Есть несколько причин, по которым зависает процесс сборщика данных. Вот самые распространенные из них.

  • Пакет ожидает сигнала к началу следующей итерации, но этого не происходит.

  • Пакет ожидает совмещаемой блокировки, которая удерживается другим пакетом, но блокировка не освобождается.

  • При выполнении пакета возникла ошибка, которая не была правильно обработана, и поток управления был нарушен, однако сбой не привел к завершению работы пакета.

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