AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sql Timeout expired

Ein Thema von value is NULL · begonnen am 2. Nov 2010 · letzter Beitrag vom 3. Nov 2010
Antwort Antwort
value is NULL

Registriert seit: 10. Sep 2010
249 Beiträge
 
#1

Sql Timeout expired

  Alt 2. Nov 2010, 07:38
Datenbank: MSDE2000 • Version: 1 • Zugriff über: local
Hi Leute

habe folgendes problem. Ich versuche mittels folgendem code Inserts abzuschießen (ca 2,5 Mio)
jedoch bekomme ich nach einer willkürlichen Zahl an erledigten Inserts ein "Timeout Expired"

denn connect mache ich wie folgt:

Delphi-Quellcode:
function connect(): string;
begin
try
  CoInitialize(nil);
  Conn := TADOConnection.Create(nil);
  Conn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info = False;Initial Catalog=mydb;Data Source=localhost';
  Conn.Connected := true;
except
  on e : exception do begin
    Writeln(e.message);
    halt(1);
  end;
end;
end;
anschließend mache ich den insert

Delphi-Quellcode:
function update(sQuerySQL : string) : string;

begin
oTmpQry := TADOQuery.Create(nil);
try
  try
    oTmpQry.Connection := Conn;
    oTmpQry.CommandTimeout := 5000;
    oTmpQry.SQL.Text := sQuerySQL;
    oTmpQry.ExecSQL;
  except
    on e : exception do begin
      Writeln(e.message);
      halt(1);
    end;
  end;
Finally
  oTmpQry.free;
end;
end;
und anschließend das connect close

Delphi-Quellcode:
function close(): string;
begin
try
  Conn.Close;
  conn.Free;

except
  on e : exception do begin
      Writeln(e.message);
      halt(1);
  end;
end;
end;
mein prozedere ist wie folgt, ich lese aus einer anderen db werte aus und bastel mir einen insert string,
und diesen schieße ich mit den obigen prozeduren in eine andere db ab....

irgenwelche Ideen warum ich immer ein Timeout bekomme nach zB 70.000 inserts?

LG
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Sql Timeout expired

  Alt 2. Nov 2010, 07:50
Wieso erzeugst du denn ständig ein neues TADOQuery-Objekt und zerstörst es anschliesend wieder?
Aber es geht auch ohne TADOQuery:
Delphi-Quellcode:
function update(const SQL : string) : string;
                      ^^^ keine Query, sondern nur eine SQL-Anweisung
begin
  try
    Conn.Execute(SQL); // SQL-Anweisung direkt über die Connection abschicken
  except
    on e : exception do begin
      Writeln(e.message);
      halt(1);
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Sql Timeout expired

  Alt 2. Nov 2010, 07:53
mist, sx2008 war schneller...
Wenn Du mit einem SQL-Server arbeitest (SSPI) wäre auch zu überlegen ob DTS nicht die bessere Alternative wäre bei 2,5 Sätzen.
Oder gegf. einen Verbindungsserver aufmachen und den SQL über alle Daten auf einmal ausführen.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Sql Timeout expired

  Alt 2. Nov 2010, 08:21
Iiii. SQL-Strings direkt ohne Parmeter.

Ich tipp mal darauf das die MSDE einfach vollkommen in die Knie geht um die Datensätze in einer einzigen Transaktion einzufügen und so schon ein einzelner Insert sehr lange dauert und den Timeout zuschlagen lässt. Wie schaut es mit dem Speicherverbrauch und HD-Aktivitäten aus? Ich denke hier wird die MSDE schon an die von MS künstlichen Grenzen schlagen.

Bei vielen gleichen Datensätzen sind parametrisierte Abfragen um welten schneller. Als Kür wäre ein Bulk-Insert mit Parametern
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
value is NULL

Registriert seit: 10. Sep 2010
249 Beiträge
 
#5

AW: Sql Timeout expired

  Alt 2. Nov 2010, 08:44
vielen dank für die schnellen antworten,

werde das Objekt mal nicht immer zerstören und die inserts abschießen

mal sehen was passiert.

LG
  Mit Zitat antworten Zitat
value is NULL

Registriert seit: 10. Sep 2010
249 Beiträge
 
#6

AW: Sql Timeout expired

  Alt 3. Nov 2010, 08:30
hallo alle zusammen, es hat jetzt funktioniert...

ich habe bei jedem insert die connection zur DB geöffnet und dann wieder getrennt,
jetzt habe ich 1000er blöcke gemacht, dh 2 x connection open
daten holen und inserts schicken und nach dem 1000sten die 2 connections trennen und neu aufmachen...

hat jetzt ohne probleme funktioniert

danke danke!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz