Le query tra database sono costose in SQL Server?


15

Le query tra database sono costose in SQL Server? Tutti i database si trovano nella stessa istanza.


3
Non ho mai trovato alcuna prova che lo siano, no. Le uniche eccezioni a cui potrei persino pensare (ma non ho testato) sono (a) che l'ottimizzatore non può beneficiare di relazioni che non possono essere esplicite (ad esempio, può beneficiare di definizioni di chiave esterna, che non possono esistere -database) o (b) ci sono problemi con le statistiche che sono un problema sui server collegati, ma immagino che ci possano essere casi in cui anche attraverso il database un utente che esegue una query non può vedere le statistiche. Non so se (b) è reale o no - non sono stati testati, sappi solo che può essere un problema serio tra i server.
Aaron Bertrand

2
Sono con @AaronBertrand su questo, non ho visto nulla per dire definitivamente che c'è un grande successo. L'unica cosa che potrei pensare aggiungerebbe qualcosa all'equazione sarebbe forse una qualche forma di operazione di autenticazione, ma dubiterei che sarebbe significativo. Sono solo io a pensare ad alta voce, non ne sono sicuro. La tua scommessa migliore qui sarebbe quella di impostare un test / benchmark automatizzato con un database incrociato, quindi con la stessa query tra database ed eseguire quel test migliaia di volte. Ottieni la media, il massimo, ecc. E prendi la tua decisione basandoti su quello.
Thomas Stringer,

1
@thomas hai potuto vedere definitivamente una differenza guardando i piani di query attuali?
Max Vernon,

@Jonathan: la definizione di "costoso" è relativa alle alternative. Quindi, cosa stai cercando di fare e cosa stai decidendo tra? Senza ulteriori informazioni è del tutto possibile ottenere una risposta che appaia corretta a questa domanda al valore nominale, ma allo stesso tempo è assolutamente sbagliato per la tua situazione. Tutto ha un costo, ma quel costo potrebbe essere economico o costoso a seconda di cosa lo stai confrontando. E i costi delle query (ad es. Tempo, contese, ecc.) Devono essere valutati rispetto ai costi di manutenzione, costi hardware, ecc.
Solomon Rutzky,

Vorrei sapere il costo rispetto a una query nella stessa tabella.
Jonathan Allen,

Risposte:


6

Siamo spiacenti, non ho abbastanza reputazione per commentare la domanda, ma dalla mia esperienza se l'applicazione client genera una transazione per una query che utilizza join tra database, promuoverà la distribuzione e distribuirà il sovraccarico di una transazione DTC .

Il sovraccarico DTC in questo caso potrebbe essere considerato negativo per le prestazioni. Generalmente la differenza sarebbe trascurabile sebbene Microsoft descriva le transazioni DTC come tali:

Le transazioni distribuite consumano in genere risorse di sistema significative

Promozione delle transazioni

... che suggerirebbe un peggioramento delle prestazioni se il tuo server non è in grado di offrire le risorse necessarie.

Giusto per chiarire, l'articolo sopra descrive le transazioni locali promosse quando vengono introdotti sistemi remoti, ma ho visto che questo è il caso delle transazioni sullo stesso server quando si usano query tra database.

Come sottolinea Thomas Stringer nel suo commento, ci sarà un ulteriore sovraccarico nell'autenticazione, anche se penso che questo sarà guidato dal SID, ci sarà un sovraccarico minimo lì a meno che non si debbano usare credenziali separate per accedere all'altro database.

In caso di differenze nelle impostazioni del database che hanno causato un sovraccarico aggiuntivo nel join che potrebbe avere un impatto maggiore rispetto ai suggerimenti precedenti, ad esempio le regole di confronto del database. Le regole di confronto del database potrebbero manifestarsi come una differenza funzionale, non solo una differenza di prestazioni.

Penso che Aaron abbia l'argomento più forte in termini di prestazioni con l'ottimizzatore che non ha il vantaggio di utilizzare le relazioni per le query tra database mentre in un database autonomo è possibile utilizzare le relazioni a proprio vantaggio.



1
L'articolo sulla promozione delle transazioni riguarda le transazioni CLR.
stacylaray,

-2

In SQL Server 2014, le tabelle ottimizzate per la memoria non supportano le transazioni tra database. Non è possibile accedere a un altro database dalla stessa transazione o dalla stessa query che accede anche a una tabella ottimizzata per la memoria. Non è possibile copiare facilmente i dati da una tabella in un database a una tabella ottimizzata per la memoria in un altro database. http://msdn.microsoft.com/en-us/library/dn584627(v=sql.120).aspx Le transazioni distribuite e tra database non sono supportate per il mirroring del database / AOAG. http://technet.microsoft.com/en-us/library/hh393530.aspx . Se si intende utilizzare il concatenamento della proprietà, tenere presente i rischi per la sicurezza http://msdn.microsoft.com/en-us/library/ms188676.aspx


Ciò vale solo per scenari che "risorse che si estendono su più istanze o server". In questo caso stiamo parlando di una singola istanza con più database.
Jonathan Allen,

1
Mio cattivo ... Mi mancava la parte in cui si
trovava
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.