none
Bloqueos en SQLServer por uso de tablas temporales.#

    Question

  • Estimados amigos.

    Desde un buen rato tengo una serie de bloqueos en una en SQL Server. Pero la verdad no entiendo muy bien el problema.

    La aplicación utiliza una base de datos X

    Pero el bloqueo se da en otra aplicación que utiliza otra base de datos Y que no tiene nada que ver la una con la otra.

    Sin embargo la aplicación que causa el bloqueo utiliza varios procedimientos almacenados que crean varias tablas temporales #tbl_temp Por ello me imagino que el inconveniente es por ahí.

    LA PREGUNTA es como puedo eliminar este problema (preferiria una solución que no me haga eliminar las tablas temporales).

    Se puede direccionar una tabla temporal a un FILEGROUP específico.

    O que instruccion puedo utilizar para liberar los recursos en una sesión.
    Friday, April 03, 2009 4:56 PM

Answers


  • Ter recomendaria que usaras el SQL Server Profiler para monitorear la actividad del servidor levantando una traza sobre la instancia donde tienes los inconvenientes, ten en cuenta que en el momento que estas creando la traza sobre la pestaña de Event Selection debes marcar la opcion Show All Events con lo cual en la grilla donde seleccionas los objetos se activaria una seccion completa para Locks estos deberian ser los eventos que deberias revisar, al ejecutar la traza podrias ver los procesos que estan corriendo, la duracion de los mismos, la aplicacion que los lanza, el usuario que esta conectado, el SPID de la consulta, etc. (tambien podrias usar sp_who, vistas de administracion dinamicas como sys.dm_tran_locks,  el activity monitor o incluso el performance monitor para revisar los bloqueos)

    Existen opciones como manejar de forma manual el nivel de aislamiento de las transacciones para poder realizar lecturas sucias o fantasmas mientras existen bloqueos ejemplo

    SET TRANSACTION ISOLATION LEVEL {READ COMMITTED | READ UNCOMMITTED |REPEATABLE READ | SERIALIZABLE | SNAPSHOT}

    Aunque realizar lecturas de este tipo puede generar problemas en la integridad de tus datos, tambien podrias manejar el tiempo maximo permitido para que una tranasaccion espere a que se liberen recursos que se encuentren bloqueados por otra transaccion aunque tampoco es la mejor opcion, esta es la opcion

    SET LOCK_TIMEOUT timeout_period (timeout_period lo debes definir en milisegundos)

    En resumen trata de encontrar el punto exacto donde estas experimentando bloqueos, como la causa de los mismos y procura mantener la integridad de tus datos sin utilizar tecnicas para leer informacion que en ultimas no podria ser confiable, ya que utilizando estos metodos podrias estar consultando informacion que no es real o sufriendo perdidas de informacion por problemas de manejo de concurrencia.

    Saludos

    Andrés González MCITP | Business Intelligence Developer - MCPD | Web Developer http://www.intermezzo-bi.com
    Friday, April 03, 2009 7:02 PM
    Moderator