![]() |
Datenbank: MS SQL Server • Version: 2008 • Zugriff über: ADO
TADOQuery: Timeout abgelaufen beim Insert???
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? |
Re: TADOQuery: Timeout abgelaufen beim Insert???
Zitat:
Zitat:
|
Re: TADOQuery: Timeout abgelaufen beim Insert???
Vielen Dank für die schnelle Antwort!
Zitat:
Was sind Bulk-Inserts genau? |
Re: TADOQuery: Timeout abgelaufen beim Insert???
|
Re: TADOQuery: Timeout abgelaufen beim Insert???
Zitat:
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. |
Re: TADOQuery: Timeout abgelaufen beim Insert???
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. |
Re: TADOQuery: Timeout abgelaufen beim Insert???
Zitat:
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? |
Re: TADOQuery: Timeout abgelaufen beim Insert???
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. |
Re: TADOQuery: Timeout abgelaufen beim Insert???
Zitat:
Unser App auf Arbeit macht das auch noch zusammen mit prepared Statements - Mann will sich doch kein SQL-Injection leisten :-) |
Re: TADOQuery: Timeout abgelaufen beim Insert???
Zitat:
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? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 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-2025 by Thomas Breitkreuz