Les requêtes entre bases de données sont-elles coûteuses dans SQL Server? Toutes les bases de données sont dans la même instance.
sql-server
Jonathan Allen
la source
la source
Réponses:
Désolé, je n'ai pas assez de réputation pour commenter la question, mais d'après mon expérience, si l'application cliente génère une transaction pour une requête qui utilise des jointures de bases de données croisées, elle favoriserait la transaction à distribuer et aurait les frais généraux d'une transaction DTC .
Les frais généraux DTC dans ce cas pourraient être considérés comme négatifs pour les performances. En général, la différence serait négligeable bien que Microsoft décrive les transactions DTC comme telles:
... ce qui suggérerait une dégradation des performances si votre serveur ne peut pas offrir les ressources dont il a besoin.
Juste pour clarifier, l'article ci-dessus décrit les transactions locales promues lorsque des systèmes distants sont introduits, mais j'ai vu que cela devenait le cas pour les transactions sur le même serveur lors de l'utilisation de requêtes inter-bases de données.
Comme le souligne Thomas Stringer dans son commentaire, il y aura des frais supplémentaires pour l'authentification, bien que je pense que comme cela sera piloté par SID, il y aura des frais minimes là-bas, sauf si vous devez utiliser des informations d'identification distinctes pour accéder à l'autre base de données.
S'il y avait une différence dans les paramètres de la base de données qui entraînait une surcharge supplémentaire dans la jointure qui pourrait avoir un impact plus important que les suggestions précédentes - par exemple le classement de la base de données. Le classement de la base de données peut se manifester comme une différence fonctionnelle, et pas seulement comme une différence de performances.
Je pense qu'Aaron a l'argument le plus fort pour les performances, l'optimiseur n'ayant pas l'avantage d'utiliser des relations pour les requêtes inter-bases de données, alors que dans une base de données autonome, vous pouvez utiliser les relations à votre avantage.
la source
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.
- Si vous avez trouvé le contraire, veuillez signaler un bug sur Connect avec des étapes de reproduction claires.Dans SQL Server 2014, les tables optimisées en mémoire ne prennent pas en charge les transactions entre bases de données. Vous ne pouvez pas accéder à une autre base de données à partir de la même transaction ou de la même requête qui accède également à une table optimisée en mémoire. Vous ne pouvez pas facilement copier des données d'une table dans une base de données vers une table optimisée en mémoire dans une autre base de données. http://msdn.microsoft.com/en-us/library/dn584627(v=sql.120).aspx Les transactions distribuées et inter-bases de données ne sont pas prises en charge pour la mise en miroir de bases de données / AOAG. http://technet.microsoft.com/en-us/library/hh393530.aspx . Si vous allez utiliser le chaînage de propriété, soyez conscient des risques de sécurité http://msdn.microsoft.com/en-us/library/ms188676.aspx
la source