sql >> Base de Datos >  >> RDS >> Sqlserver

¿Qué son los bloqueos de fila, página y tabla? ¿Y cuándo se adquieren?

Bloqueo de fila

Un bloqueo de fila es el nivel más bajo de granularidad de bloqueo posible en SQL Server. Esto significa que se bloquearán una o más filas específicas y las filas adyacentes aún estarán disponibles para el bloqueo mediante consultas simultáneas.

Bloqueo de página

Un bloqueo de página en SQL Server bloqueará 8K de datos incluso cuando su consulta solo necesite 10 bytes de la página. Por lo tanto, su consulta bloqueará datos adicionales que no solicite en su consulta.

Bloqueo Hobt

Cuando una tabla se particiona con "partición de tabla de SQL Server", es posible que se bloquee una partición única (Hobt significa Heap o B-Tree)

Nota: La escalada de bloqueo a bloqueos HOBT está deshabilitada de forma predeterminada. ejecutar ALTER TABLE MyTable SET (LOCK_ESCALATION = AUTO) para habilitar la escalada de bloqueo HOBT.

Bloqueo de mesa

Un bloqueo de mesa bloqueará la mesa completa.

¿Qué son las páginas de datos?

Microsoft SQL Server organiza todos sus datos en "Páginas de datos" que pueden contener 8K de datos. Esto significa que para cualquier acceso a datos en SQL Server 8K se leerá la información.

Las páginas de datos solo pueden contener información de una tabla y el diseño de una página está bien documentado en MSDN

El hecho de que SQL Server siempre lea una página de datos completa también le da una idea de por qué prefiere usar bloqueos de nivel de página. La implicación de los bloqueos a nivel de página es que puede bloquear muchos más datos de los que piensa.

Por ejemplo, supongamos que tenemos una tabla con un tamaño de registro total de 1024 bytes con un índice agrupado en el campo ID . Cuando ejecutamos la siguiente consulta:SELECT * from MyTable (xlock) where ID = 123 no solo se bloqueará ese registro, sino que (según el relleno de la página) también se bloquearán un máximo de 3 registros adicionales.

Cuándo se adquieren estos bloqueos

El gobernador de consultas analizará una consulta y los bloqueos necesarios se determinarán y solicitarán al administrador de bloqueos. SQL Server intentará lograr un equilibrio entre el rendimiento y la contención para determinar la estrategia de bloqueo.

SQL Server también sigue un sistema de "escalado de bloqueos" que reducirá la granularidad del bloqueo cuando se adquieran más de 5000 bloqueos de un determinado tipo. Consulte este artículo sobre escalada de bloqueo para obtener más información.

Este comportamiento se puede modificar usando sugerencias de bloqueo con énfasis en sugerencias , en una consulta puede especificar por tabla qué tipo de bloqueos preferiría. SQL Server intentará cumplir con su solicitud, pero aún aplicará la escalada de bloqueo.