Le query tra database sono costose in SQL Server? Tutti i database si trovano nella stessa istanza.
Le query tra database sono costose in SQL Server? Tutti i database si trovano nella stessa istanza.
Risposte:
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
... 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.
If a local transaction spans two or more databases on the same instance of the Database Engine, the instance uses an internal two-phase commit to commit all of the databases involved in the transaction.- Se hai trovato diversamente, segnala un bug su Connetti con passaggi di riproduzione chiari.
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