web-dev-qa-db-fra.com

Synonymes de Tables est-elle rentable dans SQL Server 2016

Pour l'un de nos nouveaux projets, nous envisagons d'utiliser beaucoup de synonymes de tables qui font référence à une autre base de données et nous sommes pleinement conscients de ce que cela fait et de la façon dont nous allons les utiliser. Mais ce que nous ne savons pas, c'est qu'il y a des frais généraux cachés sur la performance globale du serveur SQL? Sinon pas du tout.

4
Pallav Hathi

Selon - this post -

Comme un synonyme est un nom d'abstraction/alternative pour un objet de base de données déjà existant, dans le cas d'une table, le comportement d'index est identique à celui de l'objet sous-jacent, c'est-à-dire lorsque des plans d'exécution sont générés, le même plan est généré indépendamment de la table. nom ou corruption synonyme.

Vous pouvez vérifier les plans d'exécution lors de l'utilisation de l'objet ordinaire et du synonyme de voir s'ils génèrent le même plan.

this poste a une question similaire:

Comment l'utilisation des performances des effets de synonymes?

Plus spécifiquement, les synonymes sont-ils remplacés par des noms entièrement qualifiés dans des plans d'exécution? Il me semblerait que tout synonyme doit être résolu à l'objet réel de sorte que toute requête ou procédure qui ne dispose pas d'un plan mis en cache consiste à faire une étape supplémentaire dans la cartographie du synonyme d'un objet réel. Je pense qu'il y aurait une très petite performance. Peut-être un coup légèrement plus grand lorsque le synonyme se réfère à un objet sur une base de données différente et légèrement plus grand encore lorsque sur un autre serveur.

La réponse donnée était

Ils sont échangés dans la phase de liaison de l'exécution de la requête identique à celle d'une vue en expansion. Cela se produit avant la phase d'optimisation dans laquelle le plan d'exécution est généré, alors que vous voyez toujours une référence à la synonyme du texte de la requête que vous ne verrez que des références aux objets que les synonymes pointeront dans les opérateurs du plan d'exécution.

Toute performance frappée, si vous voulez même l'appeler, cela pourrait être associé à l'utilisation de Synonyme, ne vaut pas toujours la peine d'être préoccupée.

Je suis sûr Paul White (ou un autre expert fournira une réponse définitive).

4
Scott Hodgin

Lorsque vous dites "une autre base de données", voulez-vous dire dans le même exemple, c'est-à-dire la base de données2.schema.tablename? Si oui, ça devrait aller bien; Les frais généraux sont négligeables. Faites attention aux problèmes d'autorisations croisées.

Ou voulez-vous dire un autre exemple, c'est-à-dire instance2.database2.schema.tablename? Si tel est le cas, cela peut être terriblement mauvais, particulier pour plusieurs jointures de quatre parties nommées d'objets/synonymes. Voir https://blogs.msdn.microsoft.com/sqlsakthi/2011/05/08/best-Performer-Distributed-query-four-Part-or-openquery-Quelle-execute-Linked-Server-queries -In-SQL-Server / Pour un peu plus de détails, mais il se résume à utiliser OpenQuery ou similaire (exécuteur AT Works on trouve aussi) pour expédier des relevés de SQL entiers.

0
Anti-weakpasswords