CORREÇÃO: Desempenho lento no SQL Server 2012 servidor vinculado quando você atualizar os dados em conjunto com outro agrupamento no servidor remoto

BUG n º: 190237 (Manutenção do conteúdo) VSTS: 1427743

Sintomas

Considere o seguinte cenário:

  • Um servidor vinculado é configurado entre um servidor local e um servidor remoto que têm instâncias do Microsoft SQL Server 2012.

  • O servidor local é configurado usando um agrupamento, como um agrupamento de maiusculas e minúsculas.

  • O servidor remoto tem um objeto que é configurado em um agrupamento diferente do servidor local, como agrupamento diferencia maiusculas de minúsculas.

  • Uma conexão é feita do driver JDBC da Microsoft para SQL Server, o driver ODBC do Microsoft SQL Server, o provedor SQL OLE DB ou o SQL Native Client para o servidor local.

  • O driver executa uma consulta de atualização do Transact-SQL como uma instrução preparada que chama o procedimento sp_prepexec armazenados no servidor local.

  • A consulta atualiza uma tabela no servidor remoto. Isso inclui um objeto de coluna que usa um agrupamento diferente do servidor local.

Nesse cenário, você pode enfrentar desempenho lento da execução da consulta. Se você verificar o plano de execução da consulta atualização, você pode ver que uma verificação remota é executada na tabela no servidor remoto sem filtragem. Portanto, a consulta pode executar muitas leituras quando ele examina a tabela remota e, em seguida, recupera todas as linhas de volta para o servidor local.

Por exemplo, a consulta é preparada no servidor local que tenha um agrupamento padrão e o servidor remoto tem uma tabela T1 que contém uma coluna que diferenciam maiusculas de minúsculas. A atualização examina todas as linhas de T1.
DECLARE @p1 INTEXEC sp_prepexec @p1 output, N'@P0 NVARCHAR(16), @P1 NVARCHAR(16)',
N'UPDATE RemoteServer.RemoteDatabase.dbo.T1 SET COL1=@P0 WHERE COL2=@P1',
N'a', N'a'
SELECT @p1

Causa

O problema ocorre porque a consulta atualização preparado examinará a tabela remota quando o agrupamento não corresponde em ambos os servidores.

Resolução

Após aplicar o hotfix, é necessário ativar o sinalizador de rastreamento 4199 no servidor local que hospeda o servidor vinculado. Como ativar o sinalizador de rastreamento, consulte a seção mais informações.

Observação: O hotfix se aplica somente ao servidor local que hospeda o servidor vinculado e otimiza as instruções preparadas. Esse hotfix não se aplica ao servidor remoto.

O problema foi corrigido primeiro na atualização cumulativa seguinte do SQL Server.

Atualização cumulativa 6 para SQL Server 2012 SP1/en-us/help/2874879

Cada nova atualização cumulativa para SQL Server contém todos os hotfixes e todas as correções de segurança que foram incluídas com as atualização cumulativa anterior. Confira as mais recentes atualizações cumulativas para o SQL Server:


Informações sobre o hotfixUm hotfix compatível foi disponibilizado pela Microsoft. No entanto, esse hotfix destina-se a corrigir somente o problema descrito neste artigo. Aplique este hotfix somente aos sistemas que apresentarem esse problema específico.

Se o hotfix estiver disponível para download, há uma seção "Download de Hotfix disponível" na parte superior deste artigo da Base de Conhecimento. Se essa seção não for exibida, envie uma solicitação ao suporte e atendimento ao cliente Microsoft para obter o hotfix.

Observação: caso outros problemas estejam ocorrendo ou caso qualquer solução de problemas seja necessária, talvez você precise criar uma solicitação de serviço separada. Os custos normais de suporte serão aplicados a questões de suporte adicionais e problemas que não sejam específicos deste hotfix. Para obter uma lista completa dos números de telefone do Atendimento Microsoft e suporte ou para criar uma solicitação de serviço separada, visite o seguinte site da Microsoft:

http://support.microsoft.com/contactus/?ws=supportObservação: o formulário "Baixar Hotfix disponível" exibe os idiomas para os quais o hotfix está disponível. Caso você não veja seu idioma, é porque um hotfix não está disponível para esse idioma.

Pré-requisitos:Para aplicar esse hotfix, você deve ter o SQL Server 2012 instalado.

Informações do registro:Você não precisa alterar o registro após aplicar esse hotfix.

Informações de substituição do hotfix:Esse hotfix não substitui outros hotfixes.


O hotfix permite que o otimizador do SQL Server permitir que o plano de execução fazer uma filtragem remoto em que a cláusula where é enviada para o servidor remoto para minimizar as linhas recuperadas da tabela remota.

Status

A Microsoft confirma que este é um problema em seus produtos listados na seção "Aplica-se a".

Solução alternativa

Trabalhar multiplicam o problema, use um dos seguintes métodos:

  • Não use instruções preparadas no código de origem do aplicativo cliente. Você pode usar instruções de ad-hoc ou instruções que pode ser chamadas como procedimentos armazenados em vez disso, se o driver oferece suporte a essas interfaces.

  • Use agrupamento correspondente em ambos os servidores.

Mais informações

Para ativar o sinalizador de rastreamento, adicione o parâmetro de inicialização -T4199 ou TRACEON(4199,-1) de DBCC antes da instrução preparada é compilada para activar o comportamento.

Você pode usar um dos métodos a seguir para ativar o sinalizador de rastreamento:

  • Antes de iniciar o SQL Server, use o Gerenciador de configuração do Microsoft SQL Server, clique com botão direito a instância afetada e adicionar o parâmetro de inicialização -T4199 para que ele persista entre reinicializações e todas as conexões com a instância no futuro.

  • Habilitar dinamicamente a configuração em tempo de execução quando o serviço é iniciado e globalmente para todas as conexões "(-1)." Certifique-se de liberar o cache de procedimento, se você planeja fazer testes com o switch ligado ou desligado.

    Use o seguinte para ativar a configuração dinamicamente e globalmente:
    DBCC TRACEON(4199,-1)DBCC TRACESTATUS(-1)
    DBCC FREEPROCCACHE
    Use o seguinte para desativar a configuração dinamicamente e globalmente:
    DBCC TRACEOFF(4199,-1)DBCC TRACESTATUS(-1)
    DBCC FREEPROCCACHE


Autor: jannaw; jasonh
Gravador: v-shysun
Revisor técnico: jasonh; jayc; makohli; jannaw; sqlprev
Editor: v-mordew

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Estas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade da tradução?

O que afetou sua experiência?

Algum comentário adicional? (Opcional)

Obrigado por seus comentários!

×