MSSQLSERVER_856

Применимо к:SQL Server

Сведения

Атрибут значение
Название продукта SQL Server
Идентификатор события 856
Источник событий MSSQLSERVER
Компонент SQLEngine
Символическое имя BAD_MEMORY_CLEAN_DATABASE_PAGE
Текст сообщения SQL Server обнаружил повреждение памяти оборудования в базе данных "%ls", идентификатор файла: %u, идентификатор страницы; %u, адрес памяти: 0x%I64x и успешно восстановлена страница

Пояснение

Это сообщение указывает, что SQL Server обнаружила страницу плохой памяти в кэшированном объекте за пределами буферного пула. Это сообщение выдается в системах, которые поддерживают возможность восстановления после ошибок памяти. SQL Server исправляет эти ошибки памяти путем отмены поврежденных страниц памяти, которые не изменены и регистрируют это сообщение об ошибке. Если поврежденная страница памяти была изменена (является "грязной"), то возникает ошибка 824 (MSSQLSERVER_824).

Действие пользователя

Необходимо выполнить проверку оборудования или системы, чтобы определить, есть ли проблемы с памятью или ЦП. Убедитесь в том, что в системе установлены все системные драйверы, обновления операционной системы и обновления оборудования. Также рекомендуется выполнить диагностику оборудования средствами производителя, включая тесты памяти. При появлении этой ошибки желательно выполнить команду DBCC CHECKDB применительно ко всем базам данных в этом экземпляре.

Дополнительные сведения

На компьютерах с более новым оборудованием и ОС Windows Server 2012 или более поздней версии оборудование может уведомлять операционную систему и приложения о том, что страницы памяти (страницы операционной системы) помечены как поврежденные. Такие приложения, как SQL Server, могут регистрировать эти уведомления страницы плохой памяти с помощью следующего набора API:

  • GetMemoryErrorHandlingCapabilities
  • RegisterBadMemoryNotification
  • BadMemoryCallbackRoutine

SQL Server добавляет поддержку этих уведомлений в Microsoft SQL Server 2012 (11.x) и более поздних версиях. Во время запуска SQL Server SQL Server проверяет, поддерживает ли оборудование эту новую функцию. Кроме того, в журнале ошибок появится следующее сообщение:

<Компьютер datetime> Server поддерживает восстановление ошибок памяти. Защита памяти SQL включена и обеспечивает восстановление от сбоев памяти.

В настоящее время только буферный пул принимает меры, когда SQL Server получает эти уведомления. При получении уведомления SQL Server должен выполнять итерацию по всему буферу и обнаруживать адрес для каждого выделенного буфера. Затем SQL Server использует QueryWorkingSetEX API для проверки того, помечены ли какие-либо страницы памяти, которые на задней стороне страницы данных помечены как плохие. При наличии повреждений в выходной структуре PSAPI_WORKING_SET_EX_BLOCK, соответствующей странице памяти, элементу bad будет присвоено значение 1.

Если этот буферный пул или страница данных в настоящее время не изменены или не обрабатывают операции ввода-вывода, SQL Server может отменить и отменить фиксацию страницы данных. Затем SQL Server записывает следующее сообщение:

SQL Server обнаружил повреждение памяти оборудования в базе данных "%ls", идентификатор файла: %u, идентификатор страницы; %u, адрес памяти: 0x%I64x и успешно восстановил страницу.

Когда эта страница данных снова потребуется запросам, она может быть считана с диска и возвращена в буферный пул. Версия страницы на диске также может находиться в поврежденном состоянии. В этом случае SQL Server может записывать дополнительные ошибки, такие как ошибка 824.

Если плохая страница используется не буферным пулом, а другим кэшируемым объектом или структурой, SQL Server записывает следующее сообщение:

Обнаружено невосстановимое аппаратное повреждение памяти. Система может работать нестабильно. Подробности см. в журнале событий Windows.

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

Флаг трассировки SQL Server 849 можно использовать для регистрации SQL Server в операционной системе для уведомлений об ошибках памяти. Однако помните, что включение флага трассировки 849 не позволит SQL Server получать уведомления о плохой памяти из операционной системы. Поэтому в обычных обстоятельствах использовать его не рекомендуется.

Кроме того, помните, что по умолчанию SQL Server получит эти уведомления на поддерживаемом оборудовании.

Кроме того, следует учитывать, что при регистрации SQL Server для этих уведомлений об ошибках памяти системный процесс отложенного модуля записи не выполняет постоянные проверки страниц. Дополнительные сведения о проверках константных страниц см. в статье Устранение ошибки Msg 832 (изменение константной страницы) в SQL Server.