Введение:
При работе сборщика данных на
серверах, особенно если на сервере есть базы данных в зеркалировании или в
группе доступности AlwaysOn,
возможно, что со временем некоторые наборы
сборщиков данных, которые настроены на сбор с кешированием, перестают собирать
данные, а в логах возможна ошибка,
примерно следующего содержания:
Log ID 159823
Source Query
StatisticsCollection 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;
GOEXEC dbo.sp_syscollector_enable_collector;
Запустить наборы сборщиков можно через команду
sp_syscollector_run_collection_set
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 @subj = 'Ошибка сборщика данных на ' + @@SERVERNAME
EXEC msdb.dbo.sp_send_dbmail 'mail_profile',
'admin@mssqlhelp.ru;',@body = @t,
@subject = @subj
end
Частоту выполнения можно сделать достаточно каждые 30 минут.
Спасибо за столь подробное описание проблемы и её решения. Столкнулись с этим же на зеркальной БД, мониторинг подвисшего процесса завели через SCOM.
ОтветитьУдалитьПожалуйста. За SCOM спасибо, попробую у себя через него повесить мониторинг.
Удалить