Il semble que j'obtienne de nombreux blocages lors de la sélection du nombre (*) sur une table particulière. J'ai déjà modifié tous les paramètres requis et les ai transformés en verrouillage de ligne uniquement.
J'ai également modifié la base de données pour utiliser l'isolement READ_COMMITTED_SNAPSHOT,
cependant, il semble que l'utilisation d'un nombre sélectionné (*) où colonne =? sur la table déclenche des blocages ou des verrous sur la table.
Ai-je raison de dire que le nombre sélectionné (*) ne doit accéder qu'aux lignes intermédiaires?, Cependant, cela ne semble pas ainsi et je rencontre toujours des blocages. Une indexation appropriée aiderait probablement,
La question est la suivante: SQL Server 2008 R2 place-t-il un verrou partagé sur la table pendant le nombre de sélections (*) même lorsque read_committed_snapshot est activé?
Merci
WHERE
clause, la méthode à laquelle je pense ne fonctionnera pas de toute façon.Réponses:
Soyez prudent avec READ_COMMITTED_SNAPSHOT: si vous le configurez, cela peut provoquer de nombreux bugs subtils.
READ_COMMITTED_SNAPSHOT est également le niveau d'isolement par défaut, qui peut être remplacé par quelque chose. Exécutez DBCC USEROPTIONS pour déterminer le niveau d'isolement réel sous lequel votre sélection s'exécute.
JE DÉFINIRS DE FAÇON INSTANTANÉE DE NIVEAU D'ISOLEMENT DE TRANSACTION juste avant votre sélection. De cette façon, vous serez sûr que votre sélection n'embrasse jamais dans des blocages, et vous ne cassez aucun autre code, comme READ_COMMITTED_SNAPSHOT pourrait le faire.
la source
Le verrouillage avec Snapshot Isolation ne change pas. Ce qui change, c'est que lorsque des pages sont modifiées sous vous, ces pages sont copiées dans la base de données tempdb afin que vous puissiez les lire à partir de la base de données tempdb au lieu de la base de données normale. (Oui, c'est une version simplifiée de ce qui se passe.)
Vous avez mentionné que vous n'avez pas d'indexation appropriée en place, vous effectuez donc une analyse d'index en cluster (ou une analyse de table s'il s'agit d'un segment). C'est potentiellement beaucoup de données à déplacer vers la base de données tempdb. Si cette requête est exécutée plusieurs fois, je suggère d'ajouter l'index à la table.
Quel niveau d'isolement utilise votre requête?
la source