Исправление: Блокировки таблицы не преобразуются при добавлении большого количества строк в таблицу SQL Server 2008

Переводы статьи Переводы статьи
Код статьи: 2448971 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

Рассмотрим описанную ниже ситуацию.:

  • Вставить несколько строк в таблицу в Microsoft SQL Server 2008 с помощью одного из следующих запросов:
    • INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
    • SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>
    Примечания
    • надписью<target_table></target_table>Прототип представляет имя фактический целевой таблицы.
    • надписью<predicate></predicate>Прототип представляет фактическое предиката.
    • надписью<source_table></source_table>Прототип представляет фактическое исходной таблицы.
  • Превышен порог укрупнения блокировок таблицы.
В этом случае ядро базы данных не укрупнить блокировки таблицы.

Причина

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

Решение

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

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

Для получения дополнительных сведений обратитесь к следующей статье Базы Знаний Майкрософт::
968382Как получить последний пакет обновления для SQL Server 2008

Статус

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

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

Для получения дополнительных сведений о укрупнение блокировки посетите следующий веб-узел Microsoft TechNet:
Общие сведения о укрупнения блокировок
Чтобы определить, являются ли расширена блокировки таблицы, выполните следующие инструкции Transact-SQL:
USE tempdb
GO

CREATE TABLE x 
(
i INT NOT NULL PRIMARY KEY
)
GO

BEGIN TRAN
INSERT x
SELECT TOP (40000)
ROW_NUMBER() OVER 
(
ORDER BY (SELECT NULL)
) AS r
FROM 
master..spt_values a, 
master..spt_values b
ORDER BY
r

SELECT
COUNT(*)
FROM sys.dm_tran_locks
WHERE 
request_session_id = @@SPID 
ROLLBACK
GO

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


Свойства

Код статьи: 2448971 - Последний отзыв: 5 ноября 2010 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Developer
Ключевые слова: 
kbqfe kbfix kbexpertiseadvanced kbsurveynew kbmt KB2448971 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:2448971

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com