вторник, 9 сентября 2014 г.

Ошибка сборщика данных Data Collector-а


Введение:

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

Log ID                                  159823
Source                               Query Statistics
Collection Set Name   Query Statistics
Collection Item Name                      
Status                                  Error
Runtime Execution Mode              Collection
Start Time                         09.09.2014 10:26:38
Last Iteration Time      
Finish Time                       09.09.2014 10:26:38
Duration (ms)                 0
Operator                          sql -user
Package Execution ID                       
Event                                  
Data Code                       
Message
Failed to create kernel event for collection set: {2DC02BD6-E230-4C05-8516-4E8C0EF21F95}. Inner Error ------------------>
Cannot create a file when that file already exists.

Кстати журнал логов можно просмотреть так:



Описание причины :
Возможная, причина является проблемой с доступом к файлам кеширования. По умолчанию, файлы кеширования собираются в каталог :

C:\Users\sql-user\AppData\Local\Temp

Если вы откроете его, то в увидите файлы с расширением .cache, это как раз файлы, куда перед загрузкой в базу данных Data Collector-а собираются данные.

 Решение проблемы:

Данную проблему возможно решить следующим методом:

1)      Сделать загрузку данных всех наборов сборщиков данных и затем их остановить


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

2)      Отключить сборщик данных


Либо выполнить команду:

USE msdb;GO

EXEC dbo.sp_syscollector_disable_collector;

3)      Проверить отсутствие процессов DTEXEC.EXE в диспетчере задач


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

USE msdb;
GO
EXEC dbo.sp_syscollector_enable_collector;

Запустить наборы сборщиков можно через команду
sp_syscollector_run_collection_set

Но легче и удобнее сделать через MS SQL Management Studio.
Проверить наличие данных через некоторое время (когда идет загрузка в базу данных).
Замечание: данные, которые были до остановки сборщика данных, остаются.

 Рекомендации:

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

declare @t nvarchar(max);

DECLARE @subj varchar(50);

if exists(
select top 1 failure_message  from msdb.[dbo].[syscollector_execution_log_internal]

where finish_time>DATEADD(MINUTE,-20,getdate())
and failure_message is not null)
begin
      select top 1 @t=failure_message  from msdb.[dbo].           [syscollector_execution_log_internal]

      where finish_time>DATEADD(MINUTE,-20,getdate())

      and failure_message is not null

      set @t='Ошибка: '+ @t+'Ошибка сборщика данных на сервере '+ @@SERVERNAME+'. Проверьте доступность файла \\' + @@SERVERNAME + '\c$\Users\sql-user\AppData\Local\Temp. '
     
      SET @subj = 'Ошибка сборщика данных на ' + @@SERVERNAME

      EXEC msdb.dbo.sp_send_dbmail 'mail_profile',
      'admin@mssqlhelp.ru;',
      @body = @t,
      @subject = @subj


end

Частоту выполнения можно сделать достаточно каждые 30 минут.

2 комментария :

  1. Спасибо за столь подробное описание проблемы и её решения. Столкнулись с этим же на зеркальной БД, мониторинг подвисшего процесса завели через SCOM.

    ОтветитьУдалить
    Ответы
    1. Пожалуйста. За SCOM спасибо, попробую у себя через него повесить мониторинг.

      Удалить