¿Qué es la escalada de bloqueo?


48

Me hicieron esta pregunta en una entrevista y no obtuve respuesta. ¿Alguien aquí puede explicar?

Respuestas:


45

Los bloqueos de base de datos pueden existir en filas, páginas o tablas o índices completos. Cuando una transacción está en progreso, los bloqueos mantenidos por la transacción ocupan recursos. La escalada de bloqueos es donde el sistema consolida múltiples bloqueos en uno de nivel superior (por ejemplo, consolidando bloqueos de varias filas en una página o varias páginas en una tabla completa) típicamente para recuperar recursos ocupados por grandes cantidades de bloqueos de grano fino.

Lo hará de forma automática, aunque puede establecer marcas en las tablas (consulte ALTER TABLE en los libros en línea) para controlar la política de escalada de bloqueo en esa tabla en particular. En particular, la escalada de bloqueo prematura o demasiado ansiosa solía ser un problema en las versiones anteriores de Sybase y SQL Server cuando tenía dos procesos que escribían filas separadas en la misma página al mismo tiempo. Si retrocede lo suficiente (IIRC SQL Server 6.5), SQL Server en realidad no tenía bloqueo de fila, pero solo podía bloquear tablas o páginas. Cuando esto sucedió, podría obtener una disputa entre inserciones de registros en la misma página; a menudo ponía un índice agrupado en la tabla para que las nuevas inserciones fueran a diferentes páginas.


3
También debe tenerse en cuenta que no tenemos control sobre cuándo el servidor escala.

Lo hacemos ahora. Se llama T1211.
Joshua

@Joshua, el indicador de traza 1211 se usa para deshabilitar la escalada de bloqueo. No hay forma de que le digamos a SQL Server que escale en un momento específico.
Solo aprendiz

10
Los bloqueos de fila no se escalan a Bloqueos de página, sino directamente a los bloqueos de Tabla.
Manoj Pandey

Es cierto lo que dijo Manoj. Debe corregir esa parte en su respuesta para evitar engañar a los usuarios menos experimentados de SQL Server
NikolaD

21

Es un método para reducir la sobrecarga del sistema, al convertir muchas cerraduras de grano fino en menos cerraduras de grano grueso. Se puede encontrar información más detallada aquí y aquí .

Por ejemplo, si tiene muchos bloqueos (generalmente cientos o más) en filas específicas de una tabla, una vez que excede el número máximo permitido de bloqueos, estos podrían cambiarse por un bloqueo en toda la tabla.


12

SQL Server realiza la escalada de bloqueo para reducir la sobrecarga de memoria , al convertir varios bloqueos de nivel bajo de grano fino en bloqueos de nivel alto de grano grueso.

  • Los bloqueos de fila siempre se escalan a bloqueos de tabla y
  • Los bloqueos de página también se escalan a bloqueos de tabla.

Es un mito que los bloqueos de fila se escalan a bloqueos de página , lo mismo mencionado anteriormente por @ConcernedOfTunbridgeWells es incorrecto.

Si una tabla tiene muy pocas actualizaciones de fila, el motor SQL intentará quitar los bloqueos de fila en esas filas o el bloqueo de página en esas páginas. Digamos que ha tomado Row-Lock. Pero si las actualizaciones de fila aumentan el umbral (~ 5k bloqueos), en lugar de tomar varios bloqueos de fila, se necesita un solo bloqueo de tabla. Por lo tanto, esto reduce la sobrecarga de memoria al liberar varios bloqueos de fila y tomar un solo bloqueo de tabla, pero aumenta la concurrencia. Lo mismo sucede con el bloqueo de página.

El umbral de bloqueo de escala es de al menos 5000 bloqueos, y depende de varios factores, una explicación detallada de la escala de bloqueo se ha mencionado aquí en MSDN BoL: https://technet.microsoft.com/en-us/library/ms184286(v = sql.105) .aspx


5

La escalada de bloqueo significa la conversión de un bloqueo a un modo más restrictivo. Esto se ve con mayor frecuencia en las bases de datos. Una consulta puede tener un recurso bloqueado para "compartido" y escalarlo a "exclusivo" para realizar una actualización.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.