Linked servers: reduzir transferência antes de otimizar
Descubra onde o trabalho executa, filtre na origem remota e confira semântica, credenciais e comportamento durante falhas.
Uma consulta que combina uma tabela local pequena com outra remota grande pode parecer inofensiva na revisão. Em um linked server, o custo frequentemente depende do volume transferido e do número de chamadas remotas. Um resultado final pequeno não comprova filtragem seletiva na origem. Descubra onde filtros e agregações executam antes de criar índices locais ou aumentar timeouts.
Localize a fronteira cara
Capture o plano local real de uma execução representativa e examine o operador remoto e o texto enviado. Compare linhas recebidas com as que sobrevivem aos filtros locais. Se duzentas linhas finais exigem milhões de linhas largas transferidas, essa fronteira merece mais atenção que uma ordenação local de milissegundos.
Um nome de quatro partes não significa execução totalmente local. SQL Server pode delegar trabalho, dependendo da consulta, provedor, informações disponíveis e operações suportadas. Um operador remoto também não comprova um bom plano na origem. Investigue essa instância com suas próprias evidências de execução e índices.
Meça duração, chamadas, largura das linhas e carga na origem usando os mesmos parâmetros. Uma chamada por linha local pode ser pior que um lote limitado, mesmo quando cada chamada isolada é rápida. Não teste apenas clientes pequenos quando o problema ocorre justamente na maior conta.
Expresse o processamento remoto
O modelo pressupõe um linked server SQL Server ReportingLink já configurado e um banco remoto Sales. Não altera configuração nem credenciais. Adapte o esquema em ambiente de teste. Intervalo e agregação ficam dentro do texto enviado, de modo que somente totais por cliente retornam.
SELECT CustomerId, TotalAmount
FROM OPENQUERY([ReportingLink],
'SELECT CustomerId,
SUM(CONVERT(decimal(19,4), Amount)) AS TotalAmount
FROM Sales.dbo.Orders
WHERE OrderDate >= ''20260101''
AND OrderDate < ''20260201''
GROUP BY CustomerId');
Amount precisa ter o tipo numérico exato pretendido e caber na agregação decimal. As datas seguem a convenção temporal documentada dos dados remotos. Compare com um cálculo local confiável em uma amostra contendo limites, vários pedidos e ajustes negativos. Calcular mais rápido o período errado não melhora o relatório.
OPENQUERY usa texto literal, não aceita variáveis nos argumentos e limita o texto a 8 KB. Não contorne isso concatenando entradas não verificadas do usuário entre aspas aninhadas. Para parâmetros variáveis, considere um procedimento remoto deliberadamente exposto com parâmetros tipados ou uma interface de staging aprovada. Confira suporte do provedor e configuração RPC exigida para esse desenho específico.
Se chaves locais orientam a seleção, um conjunto preparado no servidor remoto pode representar o lote inteiro. Use identificador de operação, defina limpeza e isole chamadas concorrentes. Essa alternativa exige escrita e gestão do ciclo de vida; não substitui uma consulta somente de leitura sem custos operacionais adicionais.
Preserve significado e limites de falha
Collations e tipos diferentes podem alterar comparações ou exigir conversões. Teste maiúsculas, acentos, Unicode, nulos e precisão. Não declare collations compatíveis apenas para obter um plano melhor se a afirmação for falsa. Examine o texto remoto gerado após cada reescrita.
Use uma identidade remota com acesso mínimo e teste com o login real da aplicação. Uma consulta bem-sucedida como administrador não valida mapeamento ou delegação de uma conta de serviço. Mantenha credenciais fora do texto SQL e de capturas do incidente. Identifique responsáveis pelo provedor e certificados para tratar falhas de conexão.
Por fim, diferencie leituras de escritas entre servidores. Uma escrita dentro de uma transação local pode envolver transações distribuídas, conforme operação e configuração. Desativar promoção para esconder um erro pode mudar a atomicidade prometida. Simule interrupções e conclusões ambíguas em teste e desenhe repetições segundo a fronteira transacional real. Para relatórios grandes frequentes, uma cópia local mantida pode oferecer um compromisso de atualização mais fácil de medir do que repetidas junções distribuídas ao vivo.
Referências técnicas: Microsoft Learn: OPENQUERY · Microsoft Learn: Remote execution options · Microsoft Learn: Server options.