Введение:
При работе сборщика данных на серверах, особенно если на сервере есть базы данных в зеркалировании или в группе доступности 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, это как раз файлы, куда перед загрузкой в базу данных DataCollector-а собираются данные.
Данную проблему возможно решить следующим методом:
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
Но легче и удобнее сделать через MSSQLManagementStudio.
Проверить наличие данных через некоторое время (когда идет загрузка в базу данных).Замечание: данные, которые были до остановки сборщика данных, остаются.
Обычно о проблеме сборщика данных узнается когда необходимо просмотреть данные сборщика данных. Чтобы узнать о проблеме как можно раньше , я рекомендую настроить задание по расписанию, в задание добавить следующие инструкции:
declare @t nvarchar(max);
DECLARE @subj varchar(50);
ifexists(
selecttop 1 failure_message from msdb.[dbo].[syscollector_execution_log_internal]wherefinish_time>DATEADD(MINUTE,-20,getdate())
andfailure_message isnotnull)begin
selecttop 1 @t=failure_message from msdb.[dbo]. [syscollector_execution_log_internal]
where finish_time>DATEADD(MINUTE,-20,getdate())
and failure_message isnotnull
SET @subj = 'Ошибка сборщика данных на '+@@SERVERNAME
EXEC msdb.dbo.sp_send_dbmail'mail_profile',
'admin@mssqlhelp.ru;',@body = @t,
@subject = @subj
end
Частоту выполнения можно сделать достаточно каждые 30 минут.