sql >> Database teknologi >  >> RDS >> Sqlserver

Forstå timeouts for transaktionsomfang

Prøv at se på det på denne måde:

Længden af ​​transaktionen bestemmes kun, når du kalder trans.Complete() eller forlader transaktionsomfanget. Tag følgende kode:

using (var trans= new TransactionScope())
{
Threading.Sleep(99999);
trans.Complete()
}

Der er ingen måde at kaste en timeout-undtagelse på, mens du er inde i søvnrutinen, og det ville ikke give mening, hvis det gjorde det. Så brug af transaktionstimeouts (i det mindste på denne måde) kan kun garantere, at hvis transaktionen tager længere tid end din timeout, vil den ikke blive forpligtet.

Hvis du bare udfører en forespørgsel (som jeg ikke ved, hvad du bruger transaktionerne til), så kan du indstille forespørgslen/kommando timeout (eller hvad du nu kalder det). IIRC, din forespørgsel vender tilbage umiddelbart efter timeout udløber.

En anden måde ville være at indstille din webserviceanmodningstimeout og blot antage, at webservicen tager for lang tid at svare på grund af det, der var inde i din transaktion.

EDIT:Du kunne prøve:

  • Skawning af din transaktion på en anden tråd, og vent derefter til den er fuldført (ved hjælp af Thread.Join(timeout)) på din hovedtråd (en brugt af webservicekaldet). Så hvis den ikke afsluttes inden den timeout, du har angivet, kan du stoppe med at vente og returnere en timeout-fejl (glem ikke at signalere den anden tråd om at afbryde transaktionen).
  • Forudsat at du kun udfører SQL-forespørgsler inde i disse transaktioner, kan du bruge nøgleordet "BEGIN TRANSACTION" til at specificere transaktionen i sql-scriptet (hacky faktisk). Så kan du bare angive kommandoens timeout og udføre alt dette på en enkelt kodelinje. Men så kræver dette, at du flytter alt, hvad du gør i transaktionen, til et sql-script, som måske eller måske ikke er muligt for dig... og det er ikke rent.



  1. Indstilling af standardværdien for kolonnen DATO til den aktuelle dato uden tidsdel?

  2. Spring Boot:Jdbc javax.net.ssl.SSLE Undtagelse:lukker indgående før modtagelse af peers close_notify

  3. Rangering med millioner af tilmeldinger

  4. Oracle SQL trigger ved opdatering af kolonne