4

J'ai complètement lu MSDN about table hints et je ne trouve pas la granularité de verrouillage par défaut. Supposons que j'ai la requête suivante:Quelle est la granularité de verrouillage par défaut dans SQL Server?

SELECT TOP (1) * FROM MyTable WITH (UPDLOCK, READPAST) ORDER BY SomeColumn ASC; 

Vous voyez, je spécifié UPDLOCK et READPAST conseils, mais pas d'indices tels que la granularité TABLOCK ou ROWLOCK.

Quel niveau de verrouillage de granularité est utilisé par défaut?

+0

Par défaut, il s'agit d'un verrou au niveau de la ligne. Quand une session/transaction dépasse env. 5 000 verrous au niveau des lignes, le verrou est ** escaladé ** au niveau du verrou au niveau de la table (ou au niveau de la partition, si vous avez des tables partitionnées) –

Répondre

14

Il n'y a pas de 'défaut'. La granularité (ligne, page, (partition | objet)) est calculée dynamiquement en fonction des options autorisées pour l'objet (allow_page_locks/allow_row_locks), des informations sur l'intention d'opération (probe, scan, insert), la taille estimée de l'ensemble de lignes et nombre d'autres facteurs (niveau d'isolement, lecture de groupe de fichiers seulement, etc.). Dans la plupart des cas, vous obtiendrez une granularité au niveau des lignes pour les opérations singleton et une granularité au niveau de la page pour les analyses. La requête que vous avez publiée ira probablement avec la granularité au niveau de la page car il s'agit d'une analyse.

Questions connexes