DetailPage-MSS-KB

Base de Dados de Conhecimento

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:

  • Inserir várias linhas para uma tabela do Microsoft SQL Server 2008, utilizando um dos seguintes de consulta:
    • INSERT INTO <target_table> SELECT * FROM <target_table> WHERE <predicate>
    • SELECT * INTO <target_table> FROM <source_table> WHERE <predicate>
    Notas
    • O<target_table></target_table>marcador de posição representa o nome da tabela de destino real.
    • O<predicate></predicate>marcador de posição representa o predicado real.
    • O<source_table></source_table>marcador de posição representa a tabela de origem real.
  • O limiar de escalonamento de bloqueio da tabela é excedido.
Neste cenário, o motor de base de dados não escalar os bloqueios da tabela.

Causa

Este problema ocorre porque o SQL Server não conta internamente todos os bloqueios novos que são gerados pelas operações de INSERT. Por conseguinte, o limiar de escalonamento de bloqueio pode não ser accionado quando for necessário.

Resolução

Informações sobre Service Packs

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

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

Ponto Da Situação

A Microsoft confirmou que este é um problema dos 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 o SQL Server 2008.

Mais Informação

Para mais informações sobre o escalonamento de bloqueios, visite o seguinte Web 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 escalou, 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 escalou, a última instrução SELECT devolve um valor1ou2. Se os bloqueios da tabela não são escalou, a última instrução SELECT devolve um valor40,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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )
Partilhar
Opções de suporte adicionais
Fóruns de Suporte da Comunidade Microsoft
Contacte-nos directamente
Encontre um parceiro certificado Microsoft
Loja Microsoft