Estoy usando TransactionScope
para hacer algunas inserciones y actualizaciones por lotes. El problema es que obtengo excepciones de tiempo de espera en una operación de 30 minutos de duración incluso cuando establezco el tiempo de espera de TransactionScope
en una hora.El tiempo de espera de TransactionScope se produce prematuramente?
También después de la excepción, inserta cantidades aparentemente aleatorias de los registros del lote. Por ejemplo, la última operación tenía 12440 insertos y después del tiempo de espera, se insertaron 7673 registros en la tabla.
El tiempo de espera de SqlConnection
y SqlCommand
se establece en int.MaxValue
.
¿Qué estoy haciendo mal?
Aquí está mi código:
using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromHours(1)))
{
try
{
using (db = new DB())
{
//operations here
}
}
catch (Exception ex)
{
throw new Exception("DB Error:\r\n\r\n" + ex.Message);
}
transaction.Complete();
} // <--- Exception here: Transaction aborted (Inner exception: Timeout)
una pregunta más grande (y posiblemente más importante) es "¿por qué unos pocos diez mil INSERTOS tardan tanto?" –
¿Podría ser un * Tiempo de espera de comando * que está ocurriendo (y por lo tanto ser un arenque para un * Timeout de TransactionScope *)? Esto explicaría la "aleatoriedad", y teniendo en cuenta que los registros se insertan tan * muy * lentamente ... Veo que la pregunta dice "Valor_Max", pero sospecho ... que el problema no es el que parece. –
@Mitch: se ha hecho un bye uno en una conexión muy lenta. De ahí el límite de tiempo de espera de una hora :) @pst: Insertar se hace en un bucle. Cada iteración establece CommandText y se ejecuta. Así que no está esperando el resultado de un gran SQL, dudo que sea un tiempo de espera de comando. También uso un DAL muy simple con solo SqlConnection y SqlCommand, no veo nada más que se agote el tiempo. Con mucho gusto verificaría cualquier otra cosa que puedas sugerir? – dstr