none
Puede alguna sentencias select bloquear registros? RRS feed

  • Pregunta

  • Buenas tardes.

    Es posible que en algún escenario un "select campo1, campo2 from tabla where campoPk = @variable" cause algún bloqueo en la tabla, ya sea por registro, tabla o pagina, es decir este bloqueo impida que se realice otro query o alguna transacción mientras el primer query no devuelva las filas.

    Esta consulta es para SQL 2008R2

    De ante mano agradesco cualquier comentario

    lunes, 24 de junio de 2019 16:28

Respuestas

  • Si haces el Select dentro de una transacción y el nivel de aislamiento de la transacción es suficientemente elevado (creo que necesitarías "repeatable read"), entonces la select bloquea los registros leídos de manera que no se puede escribir en ellos hasta que completas la transacción.

    Solo los bloquea contra escritura, no los bloquea contra otra lectura simultanea.

    El bloqueo comienza siendo a nivel de registro y automáticamente escala a página o tabla cuando el número de registros bloqueados crece suficientemente. Si sabes de antemano (por el tipo de consulta) que vas a acabar bloqueando toda la tabla, puedes optimizar el bloqueo poniendo el hint de "with (tablock)".

    lunes, 24 de junio de 2019 18:23

Todas las respuestas

  • Si haces el Select dentro de una transacción y el nivel de aislamiento de la transacción es suficientemente elevado (creo que necesitarías "repeatable read"), entonces la select bloquea los registros leídos de manera que no se puede escribir en ellos hasta que completas la transacción.

    Solo los bloquea contra escritura, no los bloquea contra otra lectura simultanea.

    El bloqueo comienza siendo a nivel de registro y automáticamente escala a página o tabla cuando el número de registros bloqueados crece suficientemente. Si sabes de antemano (por el tipo de consulta) que vas a acabar bloqueando toda la tabla, puedes optimizar el bloqueo poniendo el hint de "with (tablock)".

    lunes, 24 de junio de 2019 18:23
  • Gracias por responder Alberto.


    lunes, 24 de junio de 2019 19:30