Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server :empêcher les lectures erronées dans une procédure stockée

Vous ne pouvez pas empêcher les lectures sales. Les écrivains prennent des verrous exclusifs pour empêcher les lectures honnêtes et engagées. Mais il n'y a rien vous pouvez faire pour empêcher les lectures sales. Le lecteur sale doit arrêter de faire des lectures sales, point final.

En supposant que le code qui interroge la table Customer est sous votre contrôle, la solution consiste à supprimer l'indice de lecture incorrecte de la requête. Cela entraînera probablement des conflits, car l'interrogation bloquera désormais les écritures. La meilleure solution pour cela est d'activer la la gestion des versions de ligne :

ALTER DATABASE [<DBNAME>] SET ALLOW_SNAPSHOT_ISOLATION ON; 
ALTER DATABASE [<DBNAME>] SET READ_COMMITTED_SNAPSHOT ON;

Ensuite, interrogez simplement le client comme une requête normale, sans aucun indice. Votre sondage ne bloquera pas les écritures, car la gestion des versions de ligne entrera en action et redirigera l'analyse de la requête vers une version pré-mise à jour et non verrouillée de la ligne.

Une note de plus :interrogation toutes les 500 ms ? Peut-être devriez-vous utiliser un mécanisme de notification de requête pour invalider vos caches, voir The Mysterious Avis .