On entend dire ici et là, que le deadlock est propre au fonctionnement interne de SQL Server ou encore qu'il résulte d'une problématique purement applicative. Et non, le deadlock n'est pas une fatalité.
Au cours de cette session, nous aborderons les méthodes pour les détecter et surtout les éviter en analysant les différents scénarios possibles au travers d'exemples simplifiés
4. #JSS2015
Sarah Bessard
Speaker
Société :
Expérience MSSQL : ~ depuis 2006, SQL Server 7 à 2014
Site / Blog : http://www.concatskills.com
Mail : sarah.bessard.pro@gmail.com
6. #JSS2015
Locking
Mécanisme de verrouillage interne
• Synchronisation des accès simultanés à une même
ressource en conservant l’intégrité des données
• Verrouillage basé par défaut sur un mode pessimiste
(transactions concurrentes en attente)
7. #JSS2015
Données
Incohérence transactionnelle Description
Lectures inconsistantes Lectures non validées
Lectures non reproductibles Relecture différente pour des SELECT
identiques et séquentiels
Lectures fantômes Données modifiées entre deux exécutions
de requête
Mises à jour perdues Perte de données lors de n mises à jour
Effets de la concurrence
8. #JSS2015
Effets de la concurrence
L o c k i n g
B l o c k i n g
D e a d l o c k
Performance et issue des transactions
10. #JSS2015
Ressource Description
RID Identifiant d’une ligne
Key Ligne ou plage de lignes dans un index
Page Page de 8Ko de data ou d’index
Extent Groupe contiguës de 8 pages de data ou
d’index
Table Intégralité d’une table (data + index)
Database Base de données
Lock – Type (granularité)
11. #JSS2015
Mode Description
Shared (S) Lecture (SELECT)
Update (U) Prévenir une mise à jour (mode demande)
Exclusive (X) Mise à jour (mode propriétaire)
Intent Hiérarchie de lock : Intent Shared (IS), Intent Update (IU),
Intent Exclusive (IX), Shared with Intent Exclusive (SIX)…
Key-Range Protège la plage de lignes en lecture lorsque le niveau
d'isolation des transactions est SERIALIZABLE
Schema Opérations impactant le schema d’une BDD
Bulk Update Opération BULK (TABLOCK)
Lock – Mode
17. #JSS2015
Bilan
FK, désactivation cascade, check
Bookmark (RID/Key Lookup), Index Scan…
NOLOCK, UPDLOCK, mode optimiste
>= 5000 lignes, manque de ressources
Contraintes
Indexation
Isolation / Locking Hint
Escalade
Même ordre d’appel des objets (PS)
La plus courte possible, pas d’intéraction utilisateur
Séquence
Transaction
…Refactoring de code