Sintomas
Considere o seguinte cenário:
- 
              Insere muitas linhas numa tabela no Microsoft SQL Server 2008 ou no SQL Server 2008 R2 utilizando uma das seguintes consultas: - 
                  INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate> 
- 
                  SELECT * INTO <target_table> FROM <source_table> WHERE <predicate> 
 Notas - 
                  O espaço reservado <target_table> representa o nome da mesa-alvo real. 
- 
                  O <predicado> espaço reservado representa o predicado real. 
- 
                  O espaço reservado <source_table> representa a tabela de origem real. 
 
- 
                  
- 
              O limiar de escalada de bloqueio da tabela é ultrapassado. 
Neste cenário, o motor da base de dados não aumenta as fechaduras da tabela.
Causa
Este problema ocorre porque o SQL Server não conta internamente todos os novos bloqueios que são gerados pelas operações INSERT. Por conseguinte, o limiar de escalada do bloqueio pode não ser acionado quando é necessário.
Resolução
Informações do pacote de serviços para SQL Server 2008
Para resolver este problema, obtenha o mais recente pacote de serviços para SQL Server 2008.Para mais informações, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:
968382 Como obter o mais recente pacote de serviços para SQL Server 2008
Informações do pacote de serviços para SQL Server 2008 R2
Para resolver este problema, obtenha o mais recente pacote de serviços para SQL Server 2008 R2. Para mais informações, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:
2527041Como obter o mais recente pacote de serviços para SQL Server 2008 R2
Estado
A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".Este problema foi corrigido pela primeira vez no SQL Server 2008 Service Pack 2 para SQL Server 2008.Este problema foi corrigido pela primeira vez no SQL Server 2008 R2 Service Pack 1 para SQL Server 2008 R2.
Mais Informações
Para obter mais informações sobre a escalada de bloqueio, visite o seguinte website da Microsoft TechNet:
Informações gerais sobre a escalada do bloqueioPara determinar se as fechaduras de uma mesa são escaladas, executar as seguintes declarações 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 
Se os bloqueios da tabela forem escalonados, a última declaração SELECT devolve um valor de 1 ou 2. Se os bloqueios da tabela não forem escalados, a última declaração SELECT devolve um valor de 40.066 ou 40.067.
 
                         
				 
				