В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

Исправление: Низкая производительность или взаимоблокировки при восстановлении базы данных и выполнять инструкции, в то же время в SQL Server 2012

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке: 2725950
Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2012 как один загружаемый файл. Так как исправления являются накопительными, каждый новый выпуск содержит все исправления и исправить все исправления, входившие в состав предыдущих 2012 SQL Server выпуска.
Проблема

Сценарий 1

Рассмотрим следующий сценарий:
  • Восстановление базы данных в Microsoft SQL Server 2012.
  • До завершения операции восстановления базы данных другой процесс ссылается на представление каталога sys.database_recovery_status и требует блокировки на той же базе данных. Например выполнение следующей инструкции SELECT :

    SELECT * FROM sys.database_recovery_status
В этом случае снижение производительности происходит ожидает процесс для инструкции SELECT , пока завершится процесс восстановления базы данных.

Сценарий 2

Рассмотрим следующий сценарий:
  • Восстановление базы данных в SQL Server 2012.
  • До завершения операции восстановления базы данных, выполните следующую инструкцию:

    IF EXISTS (SELECT * FROM sys.database_recovery_status WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
    Примечание В DataBaseID Представляет идентификатор базы данных, на котором выполняется операция восстановления базы данных.
В этом случае Взаимоблокировка возникает в процессе восстановления базы данных. Этой взаимоблокировки вызывает сбой процесса восстановления базы данных.
Причина
Два сценария, которые описаны в разделе «Проблема» вызываются одной причины.

В разделе «Scenario1» эта проблема возникает, так как процесс восстановления базы данных требует монопольной блокировки базы данных. При выполнении оператора, описанное в этом разделе, требуется разделяемую блокировку на той же базе данных. Таким образом общая блокировка ожидает монопольную блокировку до снятия монопольной блокировки.

В разделе «Вариант 2» при выполнении оператора, описанное в этом разделе разделяемую блокировку является обязательным, как в той же базе данных, так и в таблице sys.sysdbreg . Последний этап процесса восстановления базы данных процесс требуется блокировка обновления в таблице sys.sysdbreg . Тем не менее общая блокировка не удаляется из базы данных. Таким образом взаимоблокировки в таблице sys.sysdbreg , и процесс восстановления базы данных определяется как жертвы.

Решение

Накопительное обновление информации

Накопительный пакет обновления 1 для SQL Server 2012 Пакет обновления 1

Исправление этой проблемы сначала было выпущено в накопительное обновление 1. Дополнительные сведения о том, как получить этот накопительный пакет обновления для SQL Server 2012 Пакет обновления 1 щелкните следующий номер статьи базы знаний Майкрософт:
2765331 Накопительный пакет обновления 1 для SQL Server 2012 Пакет обновления 1
Примечание Поскольку построения являются накопительными, каждый новый выпуск исправление содержит все исправления и выпуска исправления исправления, входившие в состав предыдущих 2012 SQL Server. Мы рекомендуем рассмотреть применение последний выпуск исправления, содержащего это исправление. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
2772858 2012 SQL Server формирует, вышедшие после выпуска SQL Server 2012 Пакет обновления 1

Накопительный пакет обновления 3 для SQL Server 2012

Исправление этой уязвимости первого выпуска накопительного обновления 3. Для получения дополнительных сведений о том, как получить этот накопительный пакет обновления для SQL Server 2012 щелкните следующий номер статьи базы знаний Майкрософт:
2723749 Накопительного обновления 3 для SQL Server 2012
Примечание Поскольку построения являются накопительными, каждый новый выпуск исправление содержит все исправления и выпуска исправления исправления, входившие в состав предыдущих 2012 SQL Server. Мы рекомендуем рассмотреть применение последний выпуск исправления, содержащего это исправление. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
2692828 2012 SQL Server формирует, вышедшие после выпуска SQL Server 2012
Статус
Данное поведение является подтвержденной ошибкой продуктов Майкрософт, перечисленных в разделе «Информация в данной статье применима к:».
Временное решение
Для решения этой проблемы в сценарии 2, воспользуйтесь одним из следующих способов.
Способ 1


Измените оператор, чтобы избежать разделяемую блокировку на таблицу sys.sysdbreg с помощью подсказки "NOLOCK".
IF EXISTS (SELECT * FROM sys.database_recovery_status with(NOLOCK) WHERE database_id= DataBaseID AND database_guid IS NOT NULL)
Способ 2
Установить приоритет взаимоблокировки оператора «Низкий».
SET DEADLOCK_PRIORITY LOWIF EXISTS(SELECT * FROM sys.database_recovery_status where database_id = DataBaseID AND database_guid IS NOT NULL)
Примечание При использовании второго метода во избежание взаимоблокировки в инструкции и в процессе восстановления базы данных, коды в операторе IF не выполняется.
Ссылки
Дополнительные сведения о монопольной блокировки, разделяемую блокировку и блокировка обновления перейдите на следующий веб-узел MSDN:О добавочных модель обслуживания для SQL Server щелкните следующий номер статьи базы знаний Майкрософт:
935897 Последовательный модели обслуживания доступна команда SQL Server для предоставления исправления для возникающих ошибок
Для получения дополнительных сведений о схеме именования для обновления SQL Server щелкните следующий номер статьи базы знаний Майкрософт:
822499 Схема присвоения имен пакетам обновлений программного обеспечения Microsoft SQL Server
Дополнительные сведения о терминах, используемых при описании обновлений программного обеспечения, см. в следующей статье базы знаний Майкрософт:
824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 2725950 — последний просмотр: 11/20/2012 23:02:00 — редакция: 2.0

Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Express, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Web

  • kbtshoot kbqfe kbfix kbsurveynew kbexpertiseadvanced kbmt KB2725950 KbMtru
Отзывы и предложения