AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TADOQuery: Timeout abgelaufen beim Insert???
Thema durchsuchen
Ansicht
Themen-Optionen

TADOQuery: Timeout abgelaufen beim Insert???

Ein Thema von romber · begonnen am 27. Feb 2010 · letzter Beitrag vom 2. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2      
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#1

TADOQuery: Timeout abgelaufen beim Insert???

  Alt 27. Feb 2010, 10:35
Datenbank: MS SQL Server • Version: 2008 • Zugriff über: ADO
Hallo!

Ich erhalte über einen Webservice große Mengen an Daten, die ich anschließend bearbeite und einer Tabelle auf dem lokalen MS SQL Server hinzufüge. Manchmal sind es mehrere hundert Datensätze pro Minute. Einmal pro Tag führt SQL-Agent einen SQL-Script zum Löschen der älteren Datensätze aus. Derzeit sind in der Tabelle ca. 1,5 Mio. Datensätze drin.

Beim Hinzufügen erhalte ich immer öffter die Meldung von der DB-Engine "Timeout abgelaufen".
Was bedeuted diese Meldung genau?
Kann ich grundsätzlich die Tabelle irgendwie optimieren, damit Inserts schneller ausgeführt werden?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 27. Feb 2010, 11:04
Zitat von romber:
Beim Hinzufügen erhalte ich immer öffter die Meldung von der DB-Engine "Timeout abgelaufen".
Was bedeuted diese Meldung genau?
Die aktionen dauerten länger als die eingestellte Timeout-Zeit

Zitat von romber:
Kann ich grundsätzlich die Tabelle irgendwie optimieren, damit Inserts schneller ausgeführt werden?
Ja. genügend HW-Performance und Speicher zur verfügung stellen. Bulk-Inserts und Prepared Statements verwenden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 27. Feb 2010, 11:10
Vielen Dank für die schnelle Antwort!

Zitat von Bernhard Geyer:
Ja. genügend HW-Performance und Speicher zur verfügung stellen. Bulk-Inserts und Prepared Statements verwenden.
Wir haben da 8 Gb Arbeitsspeicher und MS SQL Server 2008 Enterprise. An der Speichermangel kann es nicht liegen, denke ich.
Was sind Bulk-Inserts genau?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 27. Feb 2010, 11:13
Zitat von romber:
Was sind Bulk-Inserts genau?
BULK INSERT
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 27. Feb 2010, 13:39
Zitat von romber:
Wir haben da 8 Gb Arbeitsspeicher und MS SQL Server 2008 Enterprise. An der Speichermangel kann es nicht liegen, denke ich.
Warum nicht?
Ein Polo mit 200PS ist ein Rakete, ein Mercedes G mit 200PS bewegt sich.

Es kommt nicht drauf wieviel Speicher drin ist, sondern ob ausreichend Speicher vorhanden ist.

Weiterhin kommt es auch darauf an, ob auf die Tabelle von anderer Stelle auch noch zugegriffen wird,
und damit das Schreiben in die Tabelle verzögert wird.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 27. Feb 2010, 16:56
Ich würde einfach mal den SQL Profiler vom SQL Management Studio anschmeißen und schauen was so die Inserts/Deletes/... für eine Last verursachen. Dann noch schauen was bei deiner DB für Indexgrößen in MB/GB vorhanden ist. Fast nichts ist performancefressender wenn Indizes nicht komplett in den Speicher passen und permanent von Festplatte als Teile geladen werden müssen.

Und 8GB: Wieviel davon darf sich der MS SQL Server denn genehmigen? Evtl. ist das kein dedizierter DB-Server und das DBMS ist auf 2 GB limitiert.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#7

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 27. Feb 2010, 17:30
Zitat von Bernhard Geyer:
8GB: Wieviel davon darf sich der MS SQL Server denn genehmigen? Evtl. ist das kein dedizierter DB-Server und das DBMS ist auf 2 GB limitiert.
Es ist doch ein dedizierter Server. Es sind insgesamt 12 GB Speicher vorhanden, soweit ich weiss darf SQL-Server 8 GB davon beanspruchen. Auf die Tabelle wird nur lokal zugegriffen und alle Zugriffe erfolgen von einer einzigen Anwendung.

Mit Bulk-Inserts habe ich es noch nicht ganz verstanden, bin aber dabei. Prepared Statenents hört sich viel besser an. Ich google gerade nach Prepared Statements, finde aber nur diverse Java- und PHP-Tutorials. Wie erstellen ich ein Prepared Statement?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 27. Feb 2010, 18:13
Also: Ich bekomme 80-150 INSERTs pro Sekunde hin. Wenn ich meinen kleinen Server mal richtig stressen will, baue ich mir eine kleine EXE, die über eine Verbindung einfach mal Daten in den Server bläst. Das auf ein paar PCs verteilt und dann schaff ich diese Performance. Ist auch kein Ding, eigentlich.

Ach, und der Server ist eine 1GHz Single CPU Krücke mit 1 oder 2GB RAM.

Ich denke also, das der Fehler woanders liegt.

Hast Du uns schon erzählt, wie viele Spalten die Tabelle hat? Ist es nur eine Tabelle? Sind BLOBs dabei? Indexe? Ach, und wie groß sind denn die INSERT-Befehle? Ich habe gute Erfahrungen gemacht, die INSERT-Befehle in eine Stringlist zu schreiben und wenn so zusammen 1000-2000 Zeichen zusammen sind, alles mit einem TADOConnection.Execute mal in den Server pusten. Ich hatte damit noch nie Probleme.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 27. Feb 2010, 19:19
Zitat von alzaimar:
Ich habe gute Erfahrungen gemacht, die INSERT-Befehle in eine Stringlist zu schreiben und wenn so zusammen 1000-2000 Zeichen zusammen sind, alles mit einem TADOConnection.Execute mal in den Server pusten.
Wäre dann ein "händischer" BULK-Insert

Unser App auf Arbeit macht das auch noch zusammen mit prepared Statements - Mann will sich doch kein SQL-Injection leisten
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#10

Re: TADOQuery: Timeout abgelaufen beim Insert???

  Alt 27. Feb 2010, 21:39
Zitat von alzaimar:
Hast Du uns schon erzählt, wie viele Spalten die Tabelle hat? Ist es nur eine Tabelle? Sind BLOBs dabei? Indexe? Ach, und wie groß sind denn die INSERT-Befehle?
Es ist nur eine Tabelle. Die Tabelle hat 115 Spalten, keine Blobs und erstmal keine Indexe. Die Insert-Befehle sind 1500-5000 Zeichen groß.

Liegt mein Problem vielleicht daran, dass ich es mir einfach gemacht habe und die Daten mit ADOQuery.Insert -> ADOQuery.FieldByName().Value -> ADOQuery.Post hinzufüge? Ist ein generiertes SQL-Statement die Lösung?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:21 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