![]() |
Datenbank: MSDE2000 • Version: 1 • Zugriff über: local
Sql Timeout expired
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:
anschließend mache ich den insert
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;
Delphi-Quellcode:
und anschließend das connect close
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;
Delphi-Quellcode:
mein prozedere ist wie folgt, ich lese aus einer anderen db werte aus und bastel mir einen insert string,
function close(): string;
begin try Conn.Close; conn.Free; except on e : exception do begin Writeln(e.message); halt(1); end; end; end; 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 |
AW: Sql Timeout expired
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; |
AW: Sql Timeout expired
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. |
AW: Sql Timeout expired
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 :-) |
AW: Sql Timeout expired
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 |
AW: Sql Timeout expired
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! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz