Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Timeout, mal ja mal nein

265 views
Skip to first unread message

Stefan Meyer

unread,
Jun 21, 2006, 4:52:03 AM6/21/06
to
Hallo zusammen,

ich habe folgende SQL-Anweisung (wobei das Statement bei meinem
Problem wohl egal ist):

SQL1 = "delete FROM manuellemappings WHERE (((manuellemappings.ST1)
In (SELECT [ST1] FROM [manuellemappings] As Tmp GROUP BY
[ST1],[ST1UNR],[ST2],[ST2UNR] HAVING Count(*)>1 And [ST1UNR] =
[manuellemappings].[ST1UNR] And [ST2] = [manuellemappings].[ST2] And
[ST2UNR] = [manuellemappings].[ST2UNR])) AND
((manuellemappings.Erzeugt)='G')) "

CMD1 = New SqlCommand(SQL1, CONN1)
CMD1.ExecuteNonQuery()

Das Problem: wenn ich diesen Code auf meinem Rechner (PC) in VS2005
laufen lasse (die SQL 2005-Datenbank, auf welche zugegriffen wird
liegt auf einem Server im Netz), funktioniert alles einwandfrei -
Laufzeit ca. 10-20 Sekunden.

Wenn ich die Compilierte exe auf den Datenbankserver kopiere und dort
laufen lasse (also auf dem, auf welchem auch die DB liegt) kommt es zu
Verbindungstimeouts.
Der Server hat sonst absolut nichts zu tun.

Woran kann so etwas liegen?
Umgekehrt hätte ich ja etwas, wo ich suchen könnte: Verbindung
PC->Server zu langsam etc.

Könnt Ihr mir helfen?

Vielen Dank im Voraus
Stefan Meyer

Stefan Meyer

unread,
Jun 21, 2006, 5:11:45 AM6/21/06
to
Am Wed, 21 Jun 2006 10:52:03 +0200, Stefan Meyer <sp...@orgatech.org>
schrob:

>Das Problem: wenn ich diesen Code auf meinem Rechner (PC) in VS2005
>laufen lasse (die SQL 2005-Datenbank, auf welche zugegriffen wird
>liegt auf einem Server im Netz), funktioniert alles einwandfrei -
>Laufzeit ca. 10-20 Sekunden.
>
>Wenn ich die Compilierte exe auf den Datenbankserver kopiere und dort
>laufen lasse (also auf dem, auf welchem auch die DB liegt) kommt es zu
>Verbindungstimeouts.
>Der Server hat sonst absolut nichts zu tun.

Hmm, OK...
Das Problem tritt jetzt (2.5 Mio Datensaätze) auch auf meinem PC auf.
Habt Ihr vielleicht nen Tipp, wie ich das umgehen kann?

Bräuchtet Ihr weitere Angaben?

Anbei mal das Exception log - nur für den Fall, dass es was hilft:/

Noch mal Danke im Voraus


System.Data.SqlClient.SqlException wurde nicht behandelt.
Class=11
ErrorCode=-2146232060
LineNumber=0
Message="Timeout ist abgelaufen. Das Zeitlimit wurde vor dem Beenden
des Vorgangs überschritten oder der Server reagiert nicht."
Number=-2
Procedure=""
Server="otc10"
Source=".Net SqlClient Data Provider"
State=0
StackTrace:
bei
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException
exception, Boolean breakConnection)
bei
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject
stateObj)
bei
System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject
stateObj, UInt32 error)
bei
System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult
asyncResult, TdsParserStateObject stateObj)
bei System.Data.SqlClient.TdsParserStateObject.ReadPacket(Int32
bytesExpected)
bei System.Data.SqlClient.TdsParserStateObject.ReadBuffer()
bei System.Data.SqlClient.TdsParserStateObject.ReadByte()
bei System.Data.SqlClient.TdsParser.Run(RunBehavior
runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream,
BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject
stateObj)
bei
System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String
methodName, Boolean async)
bei
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult
result, String methodName, Boolean sendToPipe)
bei System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
bei GenerateMappings.frmStart.DoublettenEntfernen() in
C:\vb.net2005\xyz\GenerateMappings2\GenerateMappings\frmStart.vb:Zeile
103.
bei
GenerateMappings.frmStart.btnDoublettenEntfernen_Click(Object sender,
EventArgs e) in
C:\vb.net2005\xyz\GenerateMappings2\GenerateMappings\frmStart.vb:Zeile
135.
bei System.Windows.Forms.Control.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs
mevent)
bei System.Windows.Forms.Control.WmMouseUp(Message& m,
MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
bei System.Windows.Forms.Button.WndProc(Message& m)
bei
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei
System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr
hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei
System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei
System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32
dwComponentID, Int32 reason, Int32 pvLoopData)
bei
System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32
reason, ApplicationContext context)
bei
System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32
reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(ApplicationContext
context)
bei
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
bei
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
bei
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[]
commandLine)
bei GenerateMappings.My.MyApplication.Main(String[] Args) in
17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
bei System.AppDomain.nExecuteAssembly(Assembly assembly,
String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile,
Evidence assemblySecurity, String[] args)
bei
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object
state)
bei System.Threading.ExecutionContext.Run(ExecutionContext
executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()

Christian Stueben

unread,
Jun 21, 2006, 6:12:06 AM6/21/06
to
Hallo Stefan,
hast Du auf allen Feldern, dim im where und im group by vorhanden sind,
einen Index?
Delete braucht immer recht viel Zeit, wenn viele Datensätze auf einmal
gelöscht werden, dann kann es wirklich mal zwanzig, dreißig oder mehr
Sekunden dauern.
Mit der Holzhammermethode:
cmd1.commandtimeout = 60;
siehe hier:
http://www.kleinurl.de/?kp18t851

vieleicht könnte allgemein das Kapitel Query tuning auch hier helfen:
www.kleinurl.de/?xm9836r1

mfg Chris

Peter Götz

unread,
Jun 21, 2006, 11:49:37 AM6/21/06
to
Hallo Stefan,


> Das Problem tritt jetzt (2.5 Mio Datensaätze) auch auf meinem PC auf.
> Habt Ihr vielleicht nen Tipp, wie ich das umgehen kann?

Der DefaultWert für Command.CommandTimeOut beträgt 30 Sekunden.
Dauert Deine Abfrage länger, bekommst Du den TimeOut.
Setze z.B.

Command.CommandTimeOut = 60

dann hat Deine Abfrage länger Zeit.
Zusätzlich wäre anzuraten, Deine Abfrage, sofern möglich zu optimieren,
damit sie eben nicht so viel Zeit verbrät.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)


0 new messages