Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

Event ID 12022 WSUS: взаимоблокировки (Deadlocks) и таймауты базы

Обновлено: 28.08.2026  ·  Официальная база знаний

Симптомы ошибки 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)

  1. Удалите устаревшие и отклоненные обновления из базы через PowerShell: запуск встроенного мастера очистки освобождает заблокированные таблицы:
# Запуск мастера очистки WSUS (Cleanup Wizard) через PowerShell:
Get-WsusServer | Invoke-WsusServerCleanup -CleanupObsoleteComputers -CleanupObsoleteUpdates -CleanupUnneededContentFiles -CompressUpdates -DeclineExpiredUpdates -DeclineSupersededUpdates
  1. Выполните скрипт реиндексации базы данных 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
  1. Отклоните замененные (Superseded) обновления: если в базе накоплено более 10 000 замененных обновлений Windows 10/11, отклоните их массово для предотвращения тупиков в транзакциях.

Рекомендация: Настройте еженедельное регламентное задание планировщика задач (Task Scheduler) для выполнения реиндексации SUSDB и очистки неиспользуемых драйверов.

Практический опыт инженера: Категория 'Драйверы' (Drivers) в WSUS за 2 года раздувает базу данных до 40 ГБ и является причиной 90% взаимных блокировок. Отключите синхронизацию драйверов в продуктивном WSUS — доставляйте драйверы через групповые политики или сторонние системы развертывания.

Частые вопросы (FAQ)

Почему возникают взаимоблокировки (Deadlocks) в WSUS?

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

Сколько времени занимает полная реиндексация SUSDB?

В зависимости от размера базы и скорости диска реиндексация занимает от 15 минут до 2 часов.

Как безопасно отменить замененные обновления Windows?

Используйте параметр -DeclineSupersededUpdates командлета Invoke-WsusServerCleanup или сторонний скрипт WSUS Automated Maintenance (WAM).

Что делать, если Invoke-WsusServerCleanup падает по таймауту?

Запускайте очистку поэтапно, передавая по одному флагу за раз (например, сначала только -DeclineExpiredUpdates, затем -CleanupObsoleteComputers).