Перейти к основному контенту
Поддержка
Войдите с помощью учетной записи Майкрософт
Войдите или создайте учетную запись.
Здравствуйте,
Выберите другую учетную запись.
У вас несколько учетных записей
Выберите учетную запись, с помощью которой нужно войти.

Проблемы

Рассмотрим следующий сценарий.

  • Вставка большого количества строк в таблицу в Microsoft SQL Server 2008 или SQL Server 2008 R2 осуществляется с помощью одного из следующих запросов:

    • INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
    • SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>

    Примечания.

    • <target_table> — фактическое имя целевой таблицы.

    • Заполнитель <predicate> представляет фактический предикат.

    • <source_table> — фактическая исходная таблица.

  • Превышено пороговое значение эскалации блокировки для таблицы.

В этом сценарии ядро СУБД не эскалируется к блокировкам таблицы.

Причина

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

Решение

Сведения о пакете обновления для SQL Server 2008

Чтобы устранить эту проблему, установите последнюю версию пакета обновления для SQL Server 2008. чтобы получить дополнительные сведения, щелкните следующий номер статьи базы знаний Майкрософт:

968382 Как получить последний пакет обновления для SQL Server 2008

Сведения о пакете обновления для SQL Server 2008 R2

Чтобы устранить эту проблему, установите последнюю версию пакета обновления для SQL Server 2008 R2. Чтобы получить дополнительные сведения, щелкните следующий номер статьи базы знаний Майкрософт:

2527041Как получить последний пакет обновления для SQL Server 2008 R2

Статус

Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".Эта проблема впервые была исправлена в SQL Server 2008 с пакетом обновления 2 (SP2) для SQL Server 2008. Эта проблема впервые исправлена в SQL Server 2008 R2 с пакетом обновления 1 (SP1) для SQL Server 2008 R2.

Дополнительная информация

Дополнительные сведения о эскалации блокировок можно найти на веб-сайте Microsoft TechNet по следующему адресу:

Общие сведения о эскалации блокировокЧтобы определить, эскалируется ли блокировки таблицы, выполните указанные ниже инструкции Transact-SQL.

USE tempdbGOCREATE TABLE x (i INT NOT NULL PRIMARY KEY)GOBEGIN TRANINSERT xSELECT TOP (40000)ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rFROM master..spt_values a, master..spt_values bORDER BYrSELECTCOUNT(*)FROM sys.dm_tran_locksWHERE request_session_id = @@SPID ROLLBACKGODROP TABLE x 

Если блокировка таблицы эскалируется, последняя инструкция SELECT возвращает значение 1 или 2. Если блокировка таблицы не эскалируется, последняя инструкция SELECT возвращает значение 40 066 или 40 067.

Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

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

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×