"Lock Escalation" est la manière dont SQL gère le verrouillage pour les mises à jour importantes. Lorsque SQL doit modifier un grand nombre de lignes, il est plus efficace pour le moteur de base de données de prendre moins de verrous plus grands (par exemple table entière) au lieu de verrouiller beaucoup de petites choses (par exemple verrous de ligne).
Mais cela peut poser problème lorsque vous avez une table volumineuse, car le fait de verrouiller la totalité de la table peut bloquer d'autres requêtes pendant longtemps. C'est le compromis: beaucoup de verrous de petite granularité sont plus lents que moins (ou un) verrous grossiers, et avoir plusieurs requêtes verrouillant différentes parties d'une table crée la possibilité de blocage si un processus attend un autre.
Il existe une option de niveau table, LOCK_ESCALATION
, nouvelle dans SQL 2008, qui permet de contrôler l'escalade de verrous. La valeur par défaut, "TABLE", permet aux verrous de s'élever jusqu'au niveau de la table. DISABLE empêche l'escalade du verrou sur la totalité de la table dans la plupart des cas. AUTO autorise les verrous de table sauf si la table est partitionnée, auquel cas les verrous ne sont créés que jusqu'au niveau de la partition. Voir this blog post pour plus d'informations.
Je suppose que l'EDI ajoute ce paramètre lors de la recréation d'une table car TABLE est la valeur par défaut dans SQL 2008. Notez que LOCK_ESCALATION n'est pas supporté dans SQL 2005, vous devrez donc le supprimer si vous essayez de l'exécuter le script sur une instance 2005. De plus, comme TABLE est la valeur par défaut, vous pouvez supprimer cette ligne en toute sécurité lors de la réexécution de votre script.
Notez également que, dans SQL 2005 avant que ce paramètre était présent, tous les verrous ne dégénèrent à la table level-- autrement dit « TABLE », était le seul paramètre sur SQL 2005.
post dupliquées sur les forums MSDN ainsi: http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/e96aa19e-d72c-46af-b2e8-4bf54de09440 –
@JustinGrant: cette expression peut être combiné avec l'instruction 'CREATE TABLE'? –
@dma_k - Cette option n'est pas pertinente pour 'CREATE TABLE' car la table n'existe pas encore, donc il n'y a rien à verrouiller. –