Problèmes avec les synonymes
Bonjour,
Je suis arrivé il y a peu de temps en temps que DBA au sein d'une société qui avait besoin de quelqu'un pour remettre de l'ordre dans leurs BDDs qui en ont grandement besoin
Un petit florilège des pratiques très ancrées dans la culture et que je vais devoir faire changer
- Pas de dimensionnement Bases, Log, TempDB, ...
- Des tables temporaires (sans jamais de PK) par dizaines dans les prosto pour "aller plus vite" 8O
- Des tables physiques sans PK deleté ou dropé chaque jour pour des process analytiques
- Des index jamais defragmenté,
- Les stats pas à jour
- Une requête est un peu longue ?? Pas de problème on reboote !! :ptdr:
Bref, je ne m'ennuie pas !!
J'en viens aux derniers problèmes en date, l'utilisation des synonymes :
Un dev m'a contacté pour une requête delete qui mets un temps fou alors qu'il n'y a aucune ligne à supprimer. Ma première idée était un problème au niveau des index, mais en faites quand il m'a dit qu'en remplaçant le synonyme par le nom complet la requête répondait instantanément, je n'ai pas su quoi lui répondre.
En fouillant un peu, j'ai finit par découvrir une totale aberration, la requête est exécutée sur le SERVEUR1 :
Code:
1 2 3 4 5 6 7 8 9 10
|
USE BDD1
/* Cette requête ne répond pas */
DELETE FROM synonym_table2 WHERE champ1 = 'toto'
/* En regardant le chemin complet du synonyme je me suis aperçu qu'il pointant sur le même serveur, la même base, mais une table différente */
/* Et celle-ci est instantanée */
DELETE FROM SERVEUR1.BDD1.dbo.table2 WHERE champ1 = 'toto' |
J'ai donc dit d'arrêter d'utiliser les synonymes pour ce genre de cas, seulement, pour ma culture personnelle, j'aimerai bien savoir si quelqu'un avait une explication à ce phénomène que je ne comprends pas.
MErci d'avance !