Event ID 12022 WSUS: взаимоблокировки (Deadlocks) и таймауты базы
Симптомы ошибки Event ID 12022
В системном журнале регистрируется ошибка: Event ID 12022: The WSUS administration console was unable to connect to the WSUS database due to a query timeout or transaction deadlock. Сервер перестает обрабатывать запросы отчетов и зависает при синхронизации метаданных.
| Признак | Описание |
|---|---|
| Query Timeout Expired | Время ожидания выполнения запроса к базе превысило 30–60 секунд |
| Deadlock victim (Жертва взаимоблокировки) | SQL-сервер принудительно завершает транзакцию WSUS (ошибка 1205) |
| 100% нагрузка на диск / CPU процессом sqlservr.exe | Процесс базы данных блокирует дисковые операции |
Пошаговое решение взаимоблокировок и таймаутов (Event ID 12022)
- Удалите устаревшие и отклоненные обновления из базы через PowerShell: запуск встроенного мастера очистки освобождает заблокированные таблицы:
# Запуск мастера очистки WSUS (Cleanup Wizard) через PowerShell:
Get-WsusServer | Invoke-WsusServerCleanup -CleanupObsoleteComputers -CleanupObsoleteUpdates -CleanupUnneededContentFiles -CompressUpdates -DeclineExpiredUpdates -DeclineSupersededUpdates- Выполните скрипт реиндексации базы данных SUSDB: скачайте и выполните официальный T-SQL скрипт обслуживания индексов:
# Скрипт реиндексации фрагментированных таблиц базы данных WSUS:
$reindexSql = @"
USE SUSDB;
SET NOCOUNT ON;
DECLARE @TableName VARCHAR(255);
DECLARE TableCursor CURSOR FOR
SELECT '[' + table_schema + '].[' + table_name + ']' FROM information_schema.tables
WHERE table_type = 'BASE TABLE';
OPEN TableCursor;
FETCH NEXT FROM TableCursor INTO @TableName;
WHILE @@FETCH_STATUS = 0
BEGIN
DBCC DBREINDEX(@TableName, ' ', 90);
FETCH NEXT FROM TableCursor INTO @TableName;
END;
CLOSE TableCursor;
DEALLOCATE TableCursor;
"@
Invoke-Sqlcmd -ServerInstance "np:\\.\pipe\MICROSOFT##WID\tsql\query" -Query $reindexSql -QueryTimeout 3600- Отклоните замененные (Superseded) обновления: если в базе накоплено более 10 000 замененных обновлений Windows 10/11, отклоните их массово для предотвращения тупиков в транзакциях.
Рекомендация: Настройте еженедельное регламентное задание планировщика задач (Task Scheduler) для выполнения реиндексации SUSDB и очистки неиспользуемых драйверов.
Частые вопросы (FAQ)
Почему возникают взаимоблокировки (Deadlocks) в WSUS?
Взаимоблокировки возникают, когда служба синхронизации пишет новые метаданные в таблицы базы, а клиенты одновременно читают эти же таблицы для поиска обновлений.
Сколько времени занимает полная реиндексация SUSDB?
В зависимости от размера базы и скорости диска реиндексация занимает от 15 минут до 2 часов.
Как безопасно отменить замененные обновления Windows?
Используйте параметр -DeclineSupersededUpdates командлета Invoke-WsusServerCleanup или сторонний скрипт WSUS Automated Maintenance (WAM).
Что делать, если Invoke-WsusServerCleanup падает по таймауту?
Запускайте очистку поэтапно, передавая по одному флагу за раз (например, сначала только -DeclineExpiredUpdates, затем -CleanupObsoleteComputers).