Диагностики SQL Server для выявления недокументированных проблем ввода-вывода из-за устаревшей операций чтения или записи потеряны

Применимо к: Microsoft SQL Server 2005 Compact EditionMicrosoft SQL Server 2005 Developer EditionMicrosoft SQL Server 2005 Enterprise Edition

Номер ошибки: 470086 (SQL Server 8.0)

Симптомы


Если причиной проблемы операционной системы, драйвера или оборудования потери записи условий или устаревшие чтения условий, может появиться сообщений об ошибке, относящиеся к целостности данных как 605 ошибками 823, 3448, 3456. Может появиться сообщения об ошибках, подобные следующим:

2003-07-24 16:43:04.57 spid63 Getpage: bstat = 0x9, sstat = 0x800 кэша
2003-07-24 16:43:04.57 spid63 номер страницы — и должно быть: objid является и должно быть:
2003-07-24 16:43:04.57 spid63 (1:7040966)/(1:7040966) 2093354622/2039782424

2003-07-24 16:43:04.57 spid63... IAM означает, что страницы выделяется для этого объекта

2003-07-24 16:52:37.67 spid63 ошибка: кодом 605, поступившие, уровень опасности: 21, состояние: 1
2003-07-24 16:52:37.67 spid63 попытке выборки логической страницы (1:7040966) в базе данных, к которым относится «pubs» объект «авторы» не для объекта «заголовки»...

2003-07-24 16:52:40.99 spid63 ошибка: 3448, уровень опасности: 21, состояние: 1
2003-07-24 16:52:40.99 spid63 не удается отменить запись журнала (63361:16876:181), для кода проводки (0:159696956) на странице (1:7040977), база данных pubs «» (12 код в базе данных). Сведения о странице: номер LSN = (63192:958360:10), тип = 2. Журнал информации: код операции = 2 контекста 1...

Ошибка spid66 14:31:35.92 2003-07-09: 823, уровень серьезности: 24, состояние: 2
2003-07-09 14:31:35.92 spid66 ввода-вывода (Неверный идентификатор страницы) обнаружена ошибка во время чтения по смещению 0x00000016774000 в файле «h:\sql\MSSQL\data\tempdb.mdf».

Ошибка spid17s 15:57:24.14 2010-02-06: 3456, уровень опасности: 21, состояние: 1.
2010-02-06 15:57:24.14 spid17s не может повторить запись журнала (58997:5252:28) для идентификатора транзакции (0:109000187) на странице (1:480946), база данных «MyDatabase» (ID 17 в базе данных). Страницы: Номер LSN = (58997:5234:17), тип = 3. Журнал: Код операции = 2, 5, контекст PrevPageLSN: (58997:5243:17). Восстановление из резервной копии базы данных или восстановить базу данных.

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


Корпорация Майкрософт представила возможности расширенного отслеживания, начиная с SQL Server 2000 Пакет обновления 4 и эти диагностики были частью продукта SQL Server 2005 и более поздних версий. Эти возможности предназначены для определения внешних проблем, связанных с ввода-вывода и сообщений об ошибках, описанных в разделе «Проблема»

Если вы получаете сообщения об ошибках, описанные в разделе «Проблема» и они не описаны события как сбоя физического диска, просмотрите всех известных проблемах с SQL Server, ОС, драйверов и оборудования. Диагностика попробуйте информацию о двух следующих условий:
  • Потерянные записи: Успешного вызова WriteFile API, но операционная система, драйвера или кэширования контроллера не очистить правильно данных на физический носитель несмотря на то, что SQL Server уведомляется о том, что запись выполнена успешно.
  • Устаревшие чтения: Успешного вызова ReadFile API, но операционная система, драйвера или кэширования контроллера неверно возвращает более старой версии данных.
Например подтвержденной сценарии WriteFile API возвращается как успешный, когда немедленно, успешное чтение того же блока данных возвращает старые данные, включая данные, скорее всего хранятся в оборудовании, чтения кэша. В некоторых случаях эта проблема возникает из-за ошибки чтения кэша. В других случаях записи данных на физический диск записывается никогда не завершится.

Для включения дополнительной диагностики проблем такого рода, SQL Server добавил флаг трассировки 818. Можно указать как параметр при запуске, флаг трассировки 818-T818, для компьютера, на котором выполняется SQL Server, или можно выполнить следующую инструкцию:
DBCC TRACEON(818, -1)

Флаг трассировки 818 позволяет в памяти кольцевого буфера, который используется для отслеживания, последний 2048 успешно записать операции, выполняемые на компьютере под управлением SQL Server, не включая от рабочего файла ввода-вывода и сортировки. При возникновении ошибки, например ошибка 605, 823 или 3448 входящего буфера журнала порядковый номер LSN значение сравнивается с последней записи списка. Если номер LSN, получаемых во время операции чтения старше указанного во время операции записи, новое сообщение об ошибке регистрируется в журнале ошибок SQL Server. Большинство операций записи SQL Server возникают как контрольные точки или отложенной записи. Отложенная запись является фоновой задачей, которая использует асинхронный ввод-вывод. Реализация кольцевого буфера является облегченной, делая производительность влияет на систему незначительно.

Следующее сообщение указывает, что SQL Server не получил ошибку от вызова API WriteFile или ReadFile API вызова. Тем не менее после проверки номера LSN, это значение не было правильно:

SQL Server обнаружил недокументированных OS/аппаратном уровне чтения или записи проблемы на странице базы данных 12 (1:75007)

Номер LSN возвратил (63361:16876:181), номер LSN ожидается (63361:16876:500)

Обратитесь к поставщику оборудования и рассмотреть возможность отключения кэширования для устранения проблемы

Начиная с SQL Server 2005, сообщение об ошибке будет выступать в качестве:

SQL Server обнаружил логическую ошибку ввода-вывода на основе соответствия: устаревшие чтения. Она произошла во время << чтения/записи >> << PAGEID >> страницы в базе данных с Идентификатором << DBID >> по смещению << КОРР. >> в файле << имя файла >>. Дополнительные сообщения в журнале событий системы или журнал ошибок SQL Server может предоставить более подробные сведения. Это серьезная ошибка, которую может нарушить целостность базы данных и должны быть исправлены немедленно. Выполните проверку согласованности базы данных (DBCC CHECKDB). Эта ошибка может быть вызвана многими причинами. Дополнительные сведения содержатся в разделе электронной документации по SQL Server.

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

Если 3448 ошибка возникает при попытке отката транзакции с 605 ошибка или ошибка 823, компьютер под управлением SQL Server автоматически закрывает базу данных и пытается открыть и восстановить базу данных. Первая страница, обнаруживает 605 ошибка или ошибка 823 считается поврежденную страницу, и идентификатор страницы хранятся на компьютере под управлением SQL Server. Во время восстановления (до стадии повтора) при чтении неверный идентификатор страницы в журнале ошибок SQL Server регистрируются основные сведения о заголовок страницы. Это действие имеет большое значение, поскольку она помогает различать ситуации потери записи и чтения устаревших.

Можно увидеть следующие два общих поведений в сценариях устаревшие чтения:
Поведения, упомянутых в предыдущем абзаце означать ошибку чтения кэширования и они часто решить, отключив чтения кэша. Действия, описанные в предыдущем параграфе обычно принудительно недействительности данных в кэше и успешных операций чтения, возникающие Показать физический носитель правильно обновляется. Потерянные записи возникает, когда страницы, считываются обратно по-прежнему старой версии данных, даже после принудительного удаления механизмов кэширования.

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

Майкрософт также указаны условия, которые не соответствуют условиям для 605 ошибка или ошибка 823, но вызвано того же действия устаревших чтения или записи потеряны. В некоторых случаях чтобы обновить два раза, но с тот же номер LSN значение появится страница. Это может происходить, если Идентификатор объекта и Идентификатор страницы правильно (страница уже выделенные для объекта), а изменения, внесенные в страницу и сброшены на диск. Получения следующей страницы возвращает старые изображения, а затем второе изменение вносится. Журнал транзакций SQL Server показывает, что страница была обновлена два раза с тем же значением номера LSN. Это действие становится проблемой при попытке восстановления последовательность журналов транзакций или проблемы целостности данных, например внешнего ключа сбоев или отсутствующие записи данных. Сообщение об ошибке иллюстрирует один из примеров этого условия:

Ошибка: 3456, уровень опасности: 21, состояние: 1 не удалось повторить запись журнала (276666:1664:19) для базы данных (0:825853240), идентификатор транзакции на странице (1:1787100), «авторы» (7). Страницы: Номер LSN = (276658:4501:9), тип = 1. Журнал: Код операции = 4, контекст 2, PrevPageLSN: (275565:3959:31).

В некоторых сценариях описаны более подробно в следующих списках:
  • LSN SequenceAction1Checkpoint
    2Begin Transaction
    3Table created or truncated
    4Inserts (Pages allocated)
    5Newly allocated page written to disk by Lazy Writer
    6Select from table – Scans IAM chain, newly allocated page read back from disk (LRU | HASHED = 0x9 in getpage message), encounters Error 605 - Invalid Object ID
    7Rollback of transaction initiated

  • LSN SequenceAction1Checkpoint
    2Begin Transaction
    3Page Modification
    4Page written to disk by Lazy Writer
    5Page read in for another modification (stale image returned)
    6Page Modified for a second time but because of stale image does not see first modification
    7Rollback – Fails – Transaction Log shows two different log records with the same PREV LSN for the page

SQL Server «сортировка» операторы выполняют операции ввода-вывода, главным образом в и из базы данных tempdb . Эти операции ввода-вывода похожи на операции ввода-вывода буфера; Тем не менее они уже созданы для использования логику повторных попыток считывания для решения аналогичных проблем. Новые средства диагностики, описанных в данной статье неприменимы для этих операций ввода-вывода.

Microsoft было отмечено, что причина для следующих сортировки чтение ошибок обычно является устаревшим чтение или потерянные записи:

20:13:31.38 2003-04-01 утверждение SQL Server spid122: файл: < p:\sql\ntdbms\storeng\drs\include\record.inl >, строка = Сбой утверждения 1447 = "m_SizeRec > 0 & & m_SizeRec < = MAXDATAROW".

2003-03-29 09:51:41.12 spid57 сортировки чтения сбой (Неверный идентификатор страницы). PageID = (0x1:0x13e9), dbid = 2, файл = создаваемую e:\program SQL Server\mssql\data\tempdb.mdf. Повторная попытка.

Ошибка spid57 09:51:41.13 2003-03-29: 823, уровень серьезности: 24, состояние: 7
2003-03-29 09:51:41.13 spid57 ошибка ввода-вывода (Неверный идентификатор страницы) во время чтения по смещению 0x000000027d2000 в файле «e:\program создаваемую SQL Server\mssql\data\tempdb.mdf»...

* 00931097 Module(sqlservr+00531097) (utassert_fail + 000002E3)
* 005B1DA8 Module(sqlservr+001B1DA8) (RecBase::Resize+00000091)
* 00407EE7 Module(sqlservr+00007EE7) (RecBase::LocateColumn+00000012)
* 00852520 Module(sqlservr+00452520) (mergerow + 000000A4)
* 008522B3 Module(sqlservr+004522B3) (merge_getnext+00000285)
* 0085207D Module(sqlservr+0045207D) (mergenext+0000000D)
* 004FC5FB Module(sqlservr+000FC5FB) (getsorted+00000021)

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

Так как устаревшие чтения или записи потеряны результаты в хранилище данных, не ожидается, может возникать разнообразные варианты поведения. Он может отображаться как отсутствующие данные, но некоторые из наиболее распространенных эффектов отсутствующие данные отображаются в виде повреждения индекса, возникает ошибка 644 или об ошибке 625:

Ошибка 644 серьезности уровень 21 сообщение текста не удалось записи индекса для RID "%. * hs индекс страницы % S_PGID, %d, идентификатор индекса в базе данных" %. * ls.

Текст сообщения об ошибке 625 серьезности 21 уровень нельзя получить строку на странице % S_PGID, RID из-за slotid (%d) не является допустимым.

Некоторые клиенты сообщали отсутствующих строк после их выполнения действия подсчета строк. Эта проблема возникает из-за потери записи. Возможно страницы должна была связана в цепочке страниц кластеризованного индекса. Если записи физически потеряно, данные также будут потеряны.

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

Примечание. Корпорация Майкрософт подтвердила в редких и высокой интенсивностью некоторых аппаратных платформ могут возвращать устаревшие чтения. Если расширенной диагностики показывают возможные устаревшие потери чтения/записи условия, обратитесь к поставщику оборудования для проверки выполните вверх и тестирования с помощью служебной программы SQLIOSim .

SQL Server требует систем, обеспечивающих гарантированную доставку стабильной носитель, как описано в разделе Требования программы стабильности системы ввода -вывода SQL Server. Дополнительные сведения о требованиях к входным и выходным компонент SQL Server database engine содержатся Требования к ввода-вывода ядра базы данных в Microsoft SQL Server.