Evitar bloquear una tabla en SQL Server

En muchos casos es necesario hacer consultas hacia la base de datos que requieren de algo de tiempo para completarse, por ejemplo consultas estadisticas. En estos casos, suele ocurrir que SQL Server puede bloquear la tabla evitando que ningún otro hilo realice consultas sobre la misma hasta que la primera consulta haya finalizado, pudiendo provocar esto una considerable lentitud en una página web o una aplicación que utilicen bastantes personas.

Existe para SQL Server un ABS, un sistema para que a la hora de realizar una consulta, evitar que esta bloquee la tabla y asi nuestra aplicación siga funcionando correctamente mientras por detras se esta realizando la consulta tediosa que en otras circunstancias nos bloquearia la tabla.

Para evitar bloquear la tabla se ha de poner with(nolock) justo despues del nombre de la tabla, por ejemplo:

SELECT * FROM tabla with(nolock)

Esto es algo muy util ya que bien porque se nos olivde o simplemente porque no se conozca es muy util tenerlo a mano para utilizarlo en casi todas las consultas que son algo tediosas.

4 comentarios en “Evitar bloquear una tabla en SQL Server

  1. Y poniendo:

    Transaction Isolation Level READ UNCOMMITTED

    no hace que tampoco se bloquee la tabla para las consultas que se hagan después?
    --Pregunto desde la ignorancia

  2. Desde mi ignoracia y la sabiduria de google te puedo decir que parece ser que es mas o menos lo mismo, tampoco bloquearia.

    El with(nolock) yo solo lo he utilizado para los SELECT, mientras que los Isolation........ son para transacciones y es independiente de la consulta que se realice, ya sea SELECT, UPDATE, etc.

  3. Conoces de alguna sentencia similar al nolock que pueda utilizar en MYSQL, puesto que estoy teniendo problemas con mi hosting dado que ellos me indican que han detectado que una sentencia select esta bloqueando tablas y que esta trayendo abajo el servidor.

    Gracias por tu respuesta

  4. Existe una sentencia similar para MySQL 5, pero con transacciones, aunque esto no creo que resuelva tu problema. Si tu servidor de MySQL se viene abajo por una consulta SQL, posiblemente sea porque la consulta no es correcta, ya que lo que hace el nolock es no bloquear la tabla para que otros puedan realzar consultas sobre esa tabla, no para que el servidor de base de datos se bloquee.

    Te recomiendo que intentes mejorar el rendimiento de la consulta, ya que seguramente este mal planteada o desarrollada.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *