Publicado originalmente el 27/02/2012 en el blog de desarrolladores de Valence por Craig Dunk.
Me gusta coleccionar errores (como en defectos de software) o al menos historias sobre errores de seguimiento. Con los errores, mis favoritos son siempre sutiles y difíciles de reproducir, pero implican un cambio de una línea (como resultado, tengo muchas historias de errores relacionadas con los hilos).
Esta semana pasé varias horas rastreando un defecto interesante. Básicamente, teníamos algunas llamadas a la API nuevas que fallaban espontáneamente en nuestro entorno de control de calidad. Después de activar el registro y buscar, identifiqué algunas excepciones que se lanzaban periódicamente y que correspondían aproximadamente a las veces que fallaban las llamadas web. Entre ellos se encontraban los siguientes:
System.Data.SqlClient.SqlException: la transacción (identificador de proceso 123) se ha bloqueado en recursos de bloqueo con otro proceso y se ha elegido como víctima del interbloqueo. Vuelva a ejecutar la transacción. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
Afortunadamente, tenemos un gran (¡y galardonado!) desarrollador de bases de datos en un equipo cercano. Había planeado establecer rastros de MSSql conmigo, pero en realidad pudo identificar la bala de plata mediante inspección y, en función de ese mensaje, pudo identificar un procedimiento almacenado y me dio una lección sobre simultaneidad.
Escribe:
La simultaneidad es una especie de Difícil de hacer bien en este caso.
Creo que queremos
SELECT @id = TableId
FROM TableName WITH (HOLDLOCK)
Tecla WHERE = @myKey
En lugar de
SELECT @id = TableId
FROM (Nombre de la tabla)
Tecla WHERE = @myKey
Esto hace una gran historia de errores para coleccionar, ya que realmente fue un cambio de una línea y me llevó algún tiempo (para mí) localizarlo y, además, ahora tengo un recurso realmente útil en forma de Publicación de Michael's Mythbuster. Lo que me gusta del post (además del tema de los Cazadores de Mitos) es que es sistemático, completo y te da las herramientas para reproducir y "probar esto en casa". Entonces, si ha llegado a esta página porque también está depurando una excepción de interbloqueo, querrá consultar la publicación anterior.