DetailPage-MSS-KB

Base de Dados de Conhecimento

ID do artigo: 2448971 - Última revisão: sexta-feira, 5 de novembro de 2010 - Revisão: 2.0

 

Nesta página

Sintomas

Considere o seguinte cenário:

  • Insira o número de linhas em uma tabela no Microsoft SQL Server 2008 usando um dos seguintes consultas:
    • INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
    • SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>
    Anotações
    • O<target_table></target_table>espaço reservado representa o nome da tabela de destino real.
    • O<predicate></predicate>espaço reservado representa o predicado real.
    • O<source_table></source_table>espaço reservado representa a tabela de origem real.
  • O limite de escalonamento de bloqueio da tabela foi excedido.
Nesse cenário, o mecanismo de banco de dados não escalonar os bloqueios da tabela.

Causa

Esse problema ocorre porque o SQL Server não contar todos os novos bloqueios que são gerados pelas operações INSERT internamente. Portanto, o limite de escalonamento de bloqueio não pode ser disparado quando for necessário.

Resolução

Informações sobre service packs

Para resolver esse problema, obtenha o service pack mais recente do SQL Server 2008.

Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
968382  (http://support.microsoft.com/kb/968382 / ) Como obter o service pack mais recente do SQL Server 2008

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Esse problema foi corrigido primeiro no SQL Server 2008 Service Pack 2 para o SQL Server 2008.

Mais Informações

Para obter mais informações sobre o escalonamento de bloqueios, visite o seguinte site da Microsoft TechNet:
Informações gerais sobre o escalonamento de bloqueios (http://msdn.microsoft.com/en-us/library/ms184286%28SQL.100%29.aspx)
Para determinar se os bloqueios de uma tabela são encaminhados, execute as seguintes instruções de 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   
Se os bloqueios da tabela são encaminhados, a última instrução SELECT retorna um valor de um1ou2. Se os bloqueios da tabela não são encaminhados, a última instrução SELECT retorna um valor de um40,066ou40,067.



A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Developer
Palavras-chave: 
kbqfe kbfix kbexpertiseadvanced kbsurveynew kbmt KB2448971 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 2448971  (http://support.microsoft.com/kb/2448971/en-us/ )
Compartilhar
Opções de suporte adicionais
Fóruns de Suporte do Microsoft Community
Contate-nos diretamente
Localize um parceiro certificado da Microsoft
Microsoft Store