Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Este Maerge me está causando Deadlock

Estas en el tema de Este Maerge me está causando Deadlock en el foro de SQL Server en Foros del Web. Hola a todos no sé cómo es posible que este Merge me cause deadlock, el hecho es que sí lo causa. Si alguien ve donde ...
  #1 (permalink)  
Antiguo 24/12/2013, 12:00
Usuario no validado
 
Fecha de Ingreso: abril-2010
Ubicación: La habana
Mensajes: 229
Antigüedad: 14 años
Puntos: 4
Este Maerge me está causando Deadlock

Hola a todos no sé cómo es posible que este Merge me cause deadlock, el hecho es que sí lo causa.

Si alguien ve donde está el problema y puediera decirme que hacer.
Salu2

;
Código SQL:
Ver original
  1. MERGE dbo.Precio_LMD AS TARGET
  2.     USING
  3.     (
  4.         SELECT  circ.Circular_IdOLTP,
  5.                 exis.Prod_IdODS,
  6.                 e.Est_PadreIdODS,
  7.                 MAX(exis.FechaReal_IdOds),
  8.                 SUM(exis.Existencias_Cantidad),
  9.                 SUM(exis.Existencias_Costo)
  10.         FROM dbo.RepTemp_LME AS exis
  11.         INNER JOIN Nomencladores.dbo.Establecimiento AS e
  12.             ON exis.Est_IdOds = e.Est_IdODS
  13.         INNER JOIN dbo.PrecioLMC AS circ
  14.             ON circ.Prod_IdODS = exis.Prod_IdODS
  15.             AND ISNULL(circ.FechaFin_IdODS,@SucFechaActual_IdOds) = exis.Fecha_IdOds
  16.         WHERE exis.Suc_EstIdOds = @SucursalEst_IdOds
  17.             AND e.Est_PadreIdODS IS NOT NULL
  18.         GROUP BY circ.Circular_IdOLTP,
  19.                 exis.Prod_IdODS,
  20.                 e.Est_PadreIdODS
  21.     )AS SOURCE
  22.     (
  23.         Circular_IdOLTP,
  24.         Prod_IdODS,
  25.         Est_IdODS,
  26.         FechaReal_IdOds,
  27.         Existencias_Cantidad,
  28.         Existencias_Costo
  29.     )
  30.     ON
  31.     (
  32.     target.Prod_IdODS = SOURCE.Prod_IdODS
  33.     AND target.Est_IdODS = SOURCE.Est_IdODS
  34.     AND target.Circular_IdOLTP = SOURCE.Circular_IdOLTP
  35.     )
  36.     WHEN NOT MATCHED BY TARGET THEN INSERT
  37.            ([Prod_IdODS]
  38.            ,[Est_IdODS]
  39.            ,[Circular_IdOLTP]
  40.            ,[FechaActualizacion_IdODS]
  41.            ,[ExistFinal_Cantidad]
  42.            ,[ExistFinal_Costo]
  43.            )
  44.           VALUES
  45.           (
  46.                 SOURCE.Prod_IdODS,
  47.                 SOURCE.Est_IdODS,
  48.                 SOURCE.Circular_IdOLTP,
  49.                 SOURCE.FechaReal_IdOds,
  50.                 SOURCE.Existencias_Cantidad,
  51.                 SOURCE.Existencias_Costo
  52.           )
  53.     WHEN MATCHED THEN UPDATE
  54.     SET target.ExistFinal_Cantidad = SOURCE.Existencias_Cantidad,
  55.         target.ExistFinal_Costo = SOURCE.Existencias_Costo;


Última edición por gnzsoloyo; 24/12/2013 a las 13:10
  #2 (permalink)  
Antiguo 24/12/2013, 12:12
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Este Maerge me está causando Deadlock

y porque no lo sustituyes por un insert update? ademas para saber en donde se causa el deadlock del merge es necesario concer el plan de ejecucion asi como el total de datos que estas afectando, con solo ver el query no se te puede decir gran cosa, ahora el deadlock lo notas cuando? ejecutas tu merge y se queda volando la transaccion o como???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 24/12/2013, 12:40
Usuario no validado
 
Fecha de Ingreso: abril-2010
Ubicación: La habana
Mensajes: 229
Antigüedad: 14 años
Puntos: 4
Respuesta: Este Maerge me está causando Deadlock

Cita:
Iniciado por Libras Ver Mensaje
y porque no lo sustituyes por un insert update? ademas para saber en donde se causa el deadlock del merge es necesario concer el plan de ejecucion asi como el total de datos que estas afectando, con solo ver el query no se te puede decir gran cosa, ahora el deadlock lo notas cuando? ejecutas tu merge y se queda volando la transaccion o como???
Sorry si no puedo mostrar gran cosa pero me es imposible mostrar aki todos los elementos implicados, puse solo esto para ver si podía verse a simple vista algo raro en ello que yo no haya sido capás de ver.
Este es el error que me da el paso del job y por varias vías he detectado que es este Merge, lo vi con el sql profile capturando el Gráfico del bloqueo pero eso no me da el problema exacto.

Message
Executed as user: NT AUTHORITY\SYSTEM. Transaction (Process ID 66) was deadlocked on lock | communication buffer resources with another process and has been chosen as the deadlock victim. Rerun the transaction. [SQLSTATE 40001] (Error 1205) 2 [SQLSTATE 01000] (Error 0) 2 [SQLSTATE 01000] (Error 0). The step failed.
  #4 (permalink)  
Antiguo 24/12/2013, 12:46
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Este Maerge me está causando Deadlock

ya aqui pones mas armas, es un deadlock en el job, segun tu es sobre el merge, pero te dice en que paso se esta cometiendo el deadlock, cuales son los pasos de tu procesos? que se realiza antes del merge???

aqui una liga que quizas te pueda ayudar:

http://dba.stackexchange.com/questio...locking-itself
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 24/12/2013 a las 13:03
  #5 (permalink)  
Antiguo 24/12/2013, 13:07
Usuario no validado
 
Fecha de Ingreso: abril-2010
Ubicación: La habana
Mensajes: 229
Antigüedad: 14 años
Puntos: 4
Respuesta: Este Maerge me está causando Deadlock

Cita:
Iniciado por Libras Ver Mensaje
ya aqui pones mas armas, es un deadlock en el job, segun tu es sobre el merge, pero te dice en que paso se esta cometiendo el deadlock, cuales son los pasos de tu procesos? que se realiza antes del merge???
Hago varios pasos pero C que es el en ese Merge por que lo he visto con varias herramientas el profile y el Idera.
  #6 (permalink)  
Antiguo 24/12/2013, 13:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Este Maerge me está causando Deadlock

y porque no sustituyes el merge por un insert/update?? que te da mejor performance las operaciones separadas que en un merge....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 24/12/2013, 13:27
Usuario no validado
 
Fecha de Ingreso: abril-2010
Ubicación: La habana
Mensajes: 229
Antigüedad: 14 años
Puntos: 4
Respuesta: Este Maerge me está causando Deadlock

Cita:
Iniciado por Libras Ver Mensaje
y porque no sustituyes el merge por un insert/update?? que te da mejor performance las operaciones separadas que en un merge....
Es que es lo más práctico siempre para "si no están los datos aquí haz esto sino haz lo otro, ect" :(
  #8 (permalink)  
Antiguo 24/12/2013, 13:46
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Este Maerge me está causando Deadlock

para eso haces un insert si no existen update si no existen, es mas practico que el merge pero bueno cada quien se complica la vida como quiere :), ya revisaste el link que te puse???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 24/12/2013, 13:57
Usuario no validado
 
Fecha de Ingreso: abril-2010
Ubicación: La habana
Mensajes: 229
Antigüedad: 14 años
Puntos: 4
Respuesta: Este Maerge me está causando Deadlock

Cita:
Iniciado por Libras Ver Mensaje
para eso haces un insert si no existen update si no existen, es mas practico que el merge pero bueno cada quien se complica la vida como quiere :), ya revisaste el link que te puse???
No había visto el link, gracias lo voy a mirar, es que tengo la conexión muy lenta hoy.

A ver lo que pasa con el MERGE es que es muy cómodo y práctico para eso, de hecho para eso está y nunca había tenido problemas con el MERGE.
  #10 (permalink)  
Antiguo 24/12/2013, 15:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Este Maerge me está causando Deadlock

Cita:
A ver lo que pasa con el MERGE es que es muy cómodo y práctico para eso
Cómodo y práctico no quieres decir ni que sea multiuso, ni adecuado para todos los escenarios. Recuérdalo.
En muchas ocasiones (la mayooría) no son convenientes los métodos "cómodos", porque no son soluciones mágicas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 26/12/2013, 10:01
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Este Maerge me está causando Deadlock

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Cómodo y práctico no quieres decir ni que sea multiuso, ni adecuado para todos los escenarios. Recuérdalo.
En muchas ocasiones (la mayooría) no son convenientes los métodos "cómodos", porque no son soluciones mágicas.
Excelente respuesta @gnzsoloyo, @eljuank1982 si revisas el link que te puse veras que el merge en ocasiones puede provocar deadlocks por los modos de aislamiento.....como bien te dicen los metodos "comodos" no siempre son los mejores ni los mas optimos....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: fecha, join, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:04.