none
Diferencias entre el uso de (nolock) y with(nolock) en SQL Server 2014 RRS feed

  • Pregunta

  • Hola Comunidad

    Por favor su ayuda, estoy entrando en una discusión con el área de base de datos de mi trabajo, dado que ellos me reportan que se presentan bloqueos en algunas tablas de una base de datos que es utilizada desde un aplicativo que tiene mucha concurrencia.

    Ellos comentan que se evidencia que existen varias consultas dentro de procedimientos almacenados que tienen el (nolock) y que se debería cambiar por el with(nolock) para evitar los bloqueos.

    He leído muchos post, paginas, hice pruebas en la base de test que tiene la misma versión en la cual cargue una tabla con aproximadamente 7 millones de registros y abrí 2 sesiones evidenciando los siguientes escenarios:

    1) En la 1era sesión ejecute un update para modificar un campo a toda la tabla y en la 2da un select primero sin el nolock evidenciando que el update toma el bloqueo de la tabla y el select no finaliza hasta que el update termine de actualizar todos los registros.

    2) Ejecuto nuevamente el update masivo a la tabla y en la otra sesión ejecuto el mismo select pero ahora incluido el (nolock) evidenciando que el select muestra los resultado sin depender de que se finalice el update (Tomando en cuenta que puede obtener datos no reales o basura como he leido en muchos post pero ese es otro tema).

    3) Ejecuto nuevamente el update masivo y en la otra sesión el select incluido el with(nolock) evidenciando el mismo resultado que en el escenario 2.

    En base a lo detallado quisiera sus comentarios expertos de si existen diferencias en incluir en los select el (nolock) y el with(nolock) dado que según las pruebas y todo lo que he leído la única diferencia es que microsoft recomienda el cambio dado que a futuro podría quedar obsoleto el (nolock) sin el with pero en funcionamiento presenta el mismo comportamiento. 

    Me gustaría conocer todos sus comentarios, experiencias o consultas sobre el caso dado que de mi parte no se si es factible solventar el problema de bloqueos que dice existir el área de base de datos con el cambio de incluir el with en todos los select en los que tengan el (nolock).

    O yo estoy confundido dado que se le podría cambiar solo por el tema de compatibilidad con versiones futuras.

    De antemano gracias por todas sus respuestas.
    • Editado EcuaSQL sábado, 24 de agosto de 2019 17:09 redacción
    sábado, 24 de agosto de 2019 17:08

Todas las respuestas