[C#/SQL]SqlCommand.CommandTimeout werkt niet?

Pagina: 1
Acties:

  • SilentThunder
  • Registratie: September 2001
  • Laatst online: 21-05 14:05
Hi all,

Ik ben bezig met een .NET applicatie waarvoor ik onder andere de maximale execution time van een query wil beperken (MSSQL server).

Ik heb de volgende code geprobeerd:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
try
{
   SqlConnection conn = new SqlConnection(cAppSettings.Get(cConstants.DbConn_Platform));
   conn.Open();

   SqlCommand cmd = new SqlCommand("exec usp_testtimeout");
   cmd.CommandTimeout = 3;
   cmd.Connection = conn;
   

   DateTime result = Convert.ToDateTime(cmd.ExecuteScalar());

   Response.Write(result.ToLongTimeString());
   
   conn.Close();
   
}
catch(SqlException ex)
{
   Response.Write("An SqlException was thrown<br />");
   Response.Write("Number = "+ ex.Number + "<br />");
   Response.Write("Message = "+ ex.Message + "<br />");
   Response.Write("StackTrace:\n" + ex.StackTrace + "<br />");
}


De gebruikte stored procedure "usp_testtimeout" draait in de query analyser zeker 8 seconden en het resultaat wat op het scherm geschreven wordt is ook ongeveer 8 seconden.

Echter, de ingestelde CommandTimeout property is 3 seconden, maar ik krijg geen exception terug, of iets in de trant van timeout expired.

Ik heb al op Google en hier gezocht naar een dergelijk probleem, maar ik kon niks vinden.

Heeft iemand een idee wat ik verkeerd doe? :)

[ Voor 26% gewijzigd door SilentThunder op 24-08-2004 08:43 ]

Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX


  • whoami
  • Registratie: December 2000
  • Laatst online: 23-05 16:52
Ik denk dat de CommandTimeout de tijd specifieert dat er mag gewacht worden alvorens een SQL commando uitgevoerd wordt.
De commandtimeout property specifieert niet hoe lang een query / command mag duren, maar hoelang er max. mag gewacht worden op het DBMS alvorens die het command dus werkelijk laat uitvoeren.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06:53

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 24 augustus 2004 @ 08:43:
Ik denk dat de CommandTimeout de tijd specifieert dat er mag gewacht worden alvorens een SQL commando uitgevoerd wordt.
Gets or sets the wait time before terminating the attempt to execute a command and generating an error.
idd :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • SilentThunder
  • Registratie: September 2001
  • Laatst online: 21-05 14:05
whoami schreef op 24 augustus 2004 @ 08:43:
Ik denk dat de CommandTimeout de tijd specifieert dat er mag gewacht worden alvorens een SQL commando uitgevoerd wordt.
De commandtimeout property specifieert niet hoe lang een query / command mag duren, maar hoelang er max. mag gewacht worden op het DBMS alvorens die het command dus werkelijk laat uitvoeren.
Mja, daar was ik ook al bang voor, dat het dat zou zijn, in MSDN staat idd ook wel zoiets :)

Is er dan nog een andere manier om in elk geval een timeout op de uitvoer van zo'n query af te vangen? Het betreft namelijk een vrij zware applicatie en het wil nog wel eens voorkomen dat er timeouts optreden. Het idee was dan, om in geval van een timeout, de query opnieuw uit te voeren, of iets in die trant... :)

[ Voor 3% gewijzigd door SilentThunder op 24-08-2004 08:50 ]

Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX


  • whoami
  • Registratie: December 2000
  • Laatst online: 23-05 16:52
Hmm, misschien moet je eerst eens kijken of je die query niet kunt optimizen. Of je 'm niet zo kan schrijven dat ie sneller is.

https://fgheysels.github.io/


  • SilentThunder
  • Registratie: September 2001
  • Laatst online: 21-05 14:05
Het probleem is dat onze database nogal zwaar wordt belast en dat daarom soms query's eigenlijk te lang duren. Daarom wil ik graag dat een query niet langer mag duren dan X seconden en dan probeer ik het daarna wel weer opnieuw :)

Canon EOS 40D | Canon EF-S 10-22mm F/3.5-4.5 USM | Tamron 17-50mm F/2.8 | Canon EF 50mm F/1.8 II | Canon EF 70-200mm F/4L IS USM | Speedlite 430EX


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06:53

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 24 augustus 2004 @ 08:51:
Hmm, misschien moet je eerst eens kijken of je die query niet kunt optimizen. Of je 'm niet zo kan schrijven dat ie sneller is.
En evt. kan je resultaten gaan cachen, als dat mogelijk is. :) Of een soortement van redirectpagina pagina, waarbij een aparte thread het feitelijk uitvoeren gaat doen en dmv een seintje doorgeeft (cache, application of session) dat hij klaar is?
De hoofdpagina krijgt dan een "please wait while processing", met iedere 10 seconden een meta refresh oid.
Hierbij wordt alleen het cache, application of session object gecontroleerd of deze al klaar is :)
SilentThunder schreef op 24 augustus 2004 @ 08:56:
Het probleem is dat onze database nogal zwaar wordt belast en dat daarom soms query's eigenlijk te lang duren. Daarom wil ik graag dat een query niet langer mag duren dan X seconden en dan probeer ik het daarna wel weer opnieuw :)
En optimalisaties niet mogelijk? Met profiler nagaan waar de oorzaak ligt? En ontzettend veel gaan cachen in de DAL?

[ Voor 25% gewijzigd door gorgi_19 op 24-08-2004 09:00 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23-05 16:52
Wat is zwaar belast? Over hoeveel concurrente users spreken we dan, en wat doen die gebruikers?
Het zou me verbazen dat een SQL Server het lastig krijgt omdat er een paar users tegelijkertijd een query uitvoeren (tenzij de machine waarop die SQL Server draait niet performant genoeg is).

https://fgheysels.github.io/


Verwijderd

ik ben een collega van "SilentThunder"...

Nee, we kunnen de database niet "even" optimaliseren.
Wij ontwikkelen sms-diensten en op dit moment hebben we een perfomance probleem. Hiervoor zijn we met een nieuw systeem bezig. Het is de bedoeling, dat dit systeem helemaal opzichzelf gaat draaien, maar voor de eerste release, moeten we nog met de oude database werken. Het gevaar bestaat gewoon dat om het moment dat het heel druk is een query te lang duurt, waardoor andere processen ook weer langen gaan duren. We weten dat we de boel moeten optimaliseren en daar zijn we dus ook druk mee bezig.

Maar nu willen we dus gewoon enkel even weten hoe we kunnen zorgen dat een query nooit langer dan X seconden draait in .net.

In asp/vb was dit geen enkel probleem.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06:53

gorgi_19

Kruimeltjes zijn weer op :9

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • pistole
  • Registratie: Juli 2000
  • Laatst online: 21-05 21:51

pistole

Frutter

.querytimeout?

En, ik zou verder kijken naar optimalisaties van je queries; locking hints, juiste indexes etc doen wonderen. Ctrl-L in de QA is your friend ;)

Ik frut, dus ik epibreer


Verwijderd

pistole schreef op 24 augustus 2004 @ 09:14:
.querytimeout?

En, ik zou verder kijken naar optimalisaties van je queries; locking hints, juiste indexes etc doen wonderen. Ctrl-L in de QA is your friend ;)
ik weet het :) en geloof me, dat hebben we al gedaan. Het probleem zijn niet zo zeer onze queries, maar meer het database ontwerp. Het ontwerp is nu bijna 2 jaar oud en we hadden nooit durven dromen dat we nu zoveel gebruikers + sms verkeer zouden doen. Dus ons database ontwerp is gewoon achterhaald :)

Verwijderd

ik kan nou niet echt vinden hoe ik .querytimeout kan gebruiken
Ik heb op MSDN zitten kijken, maar het lijkt wel of het alleen in de ReplicationClass zit.

http://search.microsoft.c...u=querytimeout+&s=1&swc=4

  • EfBe
  • Registratie: Januari 2000
  • Niet online
ExecuteScalar executeert ExecuteReader (intern) en die neemt de timeout mee. Deze zou dus wel degelijk een timeout moeten geven. Ik vind je test overigens wel erg onnauwkeurig. Bepaal exact VOOR en exact NA de execution de tijd en kijk dan wat het verschil is.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com

Pagina: 1