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


Quiero saber más sobre los diferentes tipos de bloqueos que adquiere el Motor de base de datos.

  1. ¿Qué son
    • Cerraduras de fila
    • Bloqueos de página
    • Bloqueos de tabla
  2. ¿Qué es una página en realidad? Como sé, " row "representa un registro, "table" representa todos los registros de una tabla. Pero ¿qué es page con respecto a una tabla?
  3. Cuando estos bloqueos son adquiridos (escenarios) por el Motor de Base de datos?

Por favor ayúdame a entender estos concepto.

Author: Filip De Vos, 2012-03-20

1 answers

Row Lock

Un bloqueo de fila es el nivel más bajo de granularidad de bloqueo posible en SQL Server. Esto significa que una o más filas específicas se bloquearán, y las filas adyacentes todavía están disponibles para el bloqueo por 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á los datos adicionales que no solicite en su consulta.

Hobt Lock

Cuando una tabla se particiona con " SQL Server Table partitioning " es posible que una sola partición se bloquee (Hobt significa Heap o B-Tree)

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

Table Lock

Un bloqueo de tabla bloqueará la tabla completa.

Qué son las Páginas de datos

Servidor de Microsoft SQL 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á 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 a nivel de página. La implicación de los bloqueos a nivel de página es que puede bloquear muchos más datos de lo que crees.

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 ese registro se bloqueará, sino que (dependiendo del relleno de la página) un máximo de 3 registros adicionales también se bloquearán.

¿Cuándo se adquieren estas cerraduras

El gobernador de consultas analizará una consulta y los bloqueos requeridos se determinarán y solicitarán al administrador de bloqueos. SQL El servidor intentará hacer 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 bloqueo" que reducirá la granularidad del bloqueo cuando se adquieran más de 5000 bloqueos de un determinado tipo. Consulte este artículo sobre la escalada de bloqueos para obtener más información.

Este comportamiento se puede ajustar usando sugerencias de bloqueo con énfasis en sugerencias , en una consulta puede especificar por tabla qué tipo de cerraduras que preferirías. SQL Server intentará cumplir con su solicitud, pero seguirá aplicando la escalada de bloqueo.

 34
Author: Filip De Vos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-07 17:53:17