Você está offline; aguardando reconexão

Desempenho estiver lento quando você executa uma consulta no SQL Server 2005 que atualiza uma tabela em um servidor vinculado e associa a tabela a uma tabela no servidor local

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: 942982
Sintomas
Considere o seguinte cenário:
  • Você tem uma consulta que atualiza uma tabela em um servidor vinculado e associa a tabela a uma tabela no servidor local.
  • O servidor local está executando o Microsoft SQL Server 2005.
  • No servidor local, você executa a consulta no SQL Server 2005.
Nesse cenário, desempenho é lento em comparação com o desempenho da mesma consulta no Microsoft SQL Server 2000. Por exemplo, quando você executa a consulta no SQL Server 2000, a consulta leva menos de 1 segundo para terminar. No entanto, quando você executa a consulta no SQL Server 2005, a consulta leva aproximadamente 24 segundos para concluir.
Causa
A consulta executa uma operação verificação remota na tabela no servidor vinculado. Quando você executa a consulta no SQL Server 2005, a operação de verificação remota recupera todas as linhas na tabela. Se a tabela contém muitas linhas, a operação de verificação remota demora muito para terminar.

No entanto, quando você executa a consulta no SQL Server 2000, a operação de consulta remota envia a consulta para executar no servidor vinculado. Portanto, mesmo se a tabela contém muitas linhas, a operação de verificação remota é concluída em um curto período de tempo.
Como Contornar
Para contornar este problema, adicione uma restrição UNIQUE ou PRIMARY KEY na tabela no servidor local. Adicione a restrição à coluna que você usar para a operação JOIN.

Por exemplo, você atualizar a instrução DECLARE mencionada na seção Etapa 4 da "mais informação" para o seguinte:
DECLARE @t2 table (c1 int primary key, c2 int)
Situação
A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".
Mais Informações

Etapas para reproduzir esse problema


Observação Os seguintes passos consideram que você tiver dois servidores que estejam executando o SQL Server 2005. Um nome de instância é ServerA\SQL2005. O outro nome de instância é ServerB\SQL2005.
  1. Na instância do servidor do SQL Server 2005, execute as seguintes instruções para criar um banco de dados no SQL Server Management Studio:
    USE MASTERGOIF EXISTS (SELECT * FROM sysdatabases where name = 'LinktestTarget')	DROP DATABASE LinktestTargetGOCREATE DATABASE LinktestTargetGOALTER DATABASE LinktestTarget MODIFY FILE(NAME = 'LinktestTarget', SIZE = 200MB)GOALTER DATABASE LinktestTarget MODIFY FILE(NAME = 'LinktestTarget_log', SIZE = 100MB)GO
  2. Na instância do ServerB do SQL Server 2005, execute as seguintes instruções para criar um servidor vinculado no Management Studio:
    DECLARE @serverName nvarchar(50)SET @serverName = @@serverNameIF EXISTS (SELECT * FROM master..sysservers WHERE srvname = 'LS')	EXEC master.dbo.sp_dropserver @server=N'LS', @droplogins='droplogins'EXEC sp_addlinkedserver    @server = N'LS',    @srvproduct = N'SQLDB',    @provider = N'SQLOLEDB',    @datasrc = N'ServerA\SQL2005',    @catalog = N'LinktestTarget'EXEC sp_serveroption N'LS', N'data access', N'true'EXEC sp_serveroption N'LS', N'rpc out', N'true'EXEC sp_serveroption N'LS', N'rpc', N'true'EXEC sp_serveroption N'LS', N'use remote collation', N'true'EXEC sp_addlinkedsrvlogin  @rmtsrvname = N'LS',  @useself = N'true',  @locallogin = N'sa'
  3. Na instância do servidor do SQL Server 2005, execute a seguinte instrução para criar uma tabela e, em seguida, preencher a tabela com 50.000 linhas de dados:
    USE LinktestTargetGOCREATE TABLE [T1] (	[c1] [int]  NOT NULL,	[c2] [int] NOT NULL,	[c3] char (4000) NOT NULL,	CONSTRAINT [PK_t1] PRIMARY KEY CLUSTERED ([c1])WITH FILLFACTOR = 80 ON [PRIMARY] ) ON [PRIMARY]GOSET NOCOUNT ONGODECLARE @counter intSET @counter = 1WHILE @counter < 50000BEGIN	INSERT INTO T1 (c1, c2, c3) VALUES (@counter, @counter,'')	SET @counter = @counter + 1ENDGOUPDATE STATISTICS T1 (PK_t1) WITH FULLSCAN
  4. Na instância do ServerB do SQL Server 2005, execute as seguintes instruções. Observe que o desempenho fica lento.
    DECLARE @t2 table (c1 int, c2 int)INSERT INTO @t2 (c1, c2) VALUES (399990, 399990) UPDATE ASET A.c2 = B.c2FROM LS.LinktestTarget.dbo.T1 AS A 	JOIN @t2 as B on B.c1 = A.c1

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 942982 - Última Revisão: 10/23/2007 23:07:31 - Revisão: 1.1

Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition

  • kbmt kbexpertiseadvanced kbtshoot kbprb KB942982 KbMtpt
Comentários