As consultas entre bancos de dados são caras no SQL Server?

15

As consultas entre bancos de dados são caras no SQL Server? Todos os bancos de dados estão na mesma instância.

Jonathan Allen
fonte
3
Eu nunca encontrei nenhuma evidência de que eles são, não. As únicas exceções que eu consegui pensar (mas não testei) são (a) que o otimizador não pode se beneficiar de relacionamentos que não podem ser explícitos (por exemplo, pode se beneficiar de definições de chave estrangeira, que não podem existir entre -database) ou (b) há problemas com estatísticas sendo um problema em servidores vinculados, mas imagino que possa haver casos em que, mesmo no banco de dados, um usuário executando uma consulta não pode ver estatísticas. Não sei se (b) é real ou não - não testei, apenas saiba que isso pode ser um problema sério nos servidores.
Aaron Bertrand
2
Estou com @AaronBertrand neste, não vi nada para dizer definitivamente que há um enorme sucesso. A única coisa que eu pensava que acrescentaria algo à equação seria possivelmente alguma forma de operação de autenticação, mas eu duvidaria que isso fosse significativo. Isso é só eu pensando alto, não tenho certeza. Sua melhor aposta aqui seria configurar um teste / benchmark automatizado com um banco de dados cruzado, depois com a mesma consulta entre bancos de dados e executar esse teste milhares de vezes. Obtenha a média, o máximo etc. e tome sua decisão com base nisso.
Thomas Stringer
1
@ Thomas Você pode ver uma diferença definitiva olhando os planos de consulta reais?
Max Vernon
@ Jonathan: a definição de "caro" é relativa a alternativas. Então, o que você está tentando fazer e o que está decidindo? Sem mais informações, é bem possível obter uma resposta que pareça correta para essa pergunta pelo valor de face, mas ao mesmo tempo esteja absolutamente errada para sua situação. Tudo tem um custo, mas esse custo pode ser barato ou caro, dependendo do que você está comparando. E os custos de consulta (isto é, tempo, contenção, etc) precisam ser pesados contra os custos de manutenção, custos de hardware, etc.
Solomon Rutzky
Gostaria de saber o custo em comparação com uma consulta na mesma tabela.
Jonathan Allen

Respostas:

6

Desculpe, não tenho reputação suficiente para comentar sobre a pergunta, mas, pela minha experiência, se o aplicativo cliente gerar uma transação para uma consulta que usa junções de banco de dados cruzadas, isso promoveria a transação a ser distribuída e teria a sobrecarga de uma transação DTC .

A sobrecarga do DTC nesse caso pode ser vista como negativa para o desempenho. Geralmente, a diferença seria insignificante, embora a Microsoft descreva as transações DTC como tais:

As transações distribuídas geralmente consomem recursos significativos do sistema

Promoção de transação

... o que sugere uma degradação do desempenho se o servidor não puder oferecer os recursos necessários.

Apenas para esclarecer, o artigo acima descreve transações locais promovidas quando sistemas remotos são introduzidos, mas vi que esse é o caso de transações no mesmo servidor ao usar consultas entre bancos de dados.

Como Thomas Stringer aponta em seu comentário, haverá uma sobrecarga extra na autenticação, embora eu pense que, como isso será orientado pelo SID, haverá uma sobrecarga mínima lá, a menos que você precise usar credenciais separadas para acessar o outro banco de dados.

Se houvesse diferença nas configurações do banco de dados que causassem sobrecarga adicional na junção que poderia impactar maior que as sugestões anteriores - por exemplo, agrupamento de banco de dados. O agrupamento do banco de dados pode se manifestar como uma diferença funcional, não apenas como uma diferença de desempenho.

Eu acho que Aaron tem o argumento mais forte para desempenho, com o otimizador não tendo a vantagem de usar relacionamentos para consultas entre bancos de dados, enquanto independente em um banco de dados você pode usar relacionamentos para sua vantagem.

LeedsDBA
fonte
1
O artigo de promoção de transação é para transações CLR.
Stacylaray
-2

No SQL Server 2014, as tabelas com otimização de memória não suportam transações entre bancos de dados. Você não pode acessar outro banco de dados da mesma transação ou da mesma consulta que também acessa uma tabela com otimização de memória. Você não pode copiar facilmente dados de uma tabela em um banco de dados para uma tabela com otimização de memória em outro banco de dados. http://msdn.microsoft.com/en-us/library/dn584627(v=sql.120).aspx Transações distribuídas e entre bancos de dados não são suportadas para espelhamento de banco de dados / AOAG. http://technet.microsoft.com/en-us/library/hh393530.aspx . Se você usar o encadeamento de propriedade, esteja ciente dos riscos de segurança http://msdn.microsoft.com/en-us/library/ms188676.aspx

stacylaray
fonte
Isso se aplica apenas a cenários que "recursos que abrangem várias instâncias ou servidores". Nesse caso, estamos falando de uma única instância com vários bancos de dados.
Jonathan Allen
1
Meu mau ... Eu perdi a parte sobre ele ser dentro da mesma instância
stacylaray