AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken wie am besten viele Daten schnell in SQL Einfügen mit Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

wie am besten viele Daten schnell in SQL Einfügen mit Delphi

Ein Thema von LoZe · begonnen am 2. Aug 2022 · letzter Beitrag vom 2. Aug 2022
Antwort Antwort
LoZe

Registriert seit: 27. Dez 2016
Ort: Ulm
40 Beiträge
 
Delphi 12 Athens
 
#1

wie am besten viele Daten schnell in SQL Einfügen mit Delphi

  Alt 2. Aug 2022, 15:50
Datenbank: MSSQL • Version: 2018 • Zugriff über: sa
Hallo,

ich hab ein kleines Problem mit der ADO SQL Insert Geschwindigkeit.

Ich habe eine Datensatz der ca. 800.000 Daten beinhaltet dieser wird via Delphi aufgearbeitet und ist in einer TObjectList<TData>.

Bisher hatte ich für SQL Inserts immer eine Stored Procedure via TAdoStoredProc realisiert, aber bei dieser Datenmasse ist das zu langsam.

Wenn ein Neuer Datensatz da ist werden die besehenden Daten aus der Tabelle erst gelöscht und dann die neuen Daten befüllt.

Die Datenstruktur:
Delphi-Quellcode:
  TData = class
    FID: string;
    FText: String;
    FOrt: string;
    FValue: Extended;
Die Tabelle sieht so aus:
Code:
ID   nvarchar(12)   
Text   nvarchar(255)   
Ort   nvarchar(10)   
Value   float
Mein Insert bisher (in der SP ist nur der eigentlicher Insert drin).
Delphi-Quellcode:
For Data in ObjList do
begin
  ADOSP_T_SP.Active := false;
  ADOSP_T_SP.Parameters.ParamByName('@ID').Value := Data.FID;
  ADOSP_T_SP.Parameters.ParamByName('@Text').Value := Data.FText;
  ADOSP_T_SP.Parameters.ParamByName('@Ort').Value := Data.FOrt;
  ADOSP_T_SP.Parameters.ParamByName('@Value').Value := Data.FValue;
  ADOSP_T_SP.Active := true;
end;
welche Möglichkeiten gib es sonst noch? TAdoTable, TAdoCommand....
was eignet sich am besten bei so einer Datenmenge?

Edit: Server ist ein MSSQL 2017 v14.0
Chris

Geändert von LoZe ( 2. Aug 2022 um 21:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi

  Alt 2. Aug 2022, 16:09
Wenn es wirklich schnell gehen soll würde ich BULK INSERT verwenden: https://www.mssqltips.com/sqlservert...to-sql-server/
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
442 Beiträge
 
Delphi 12 Athens
 
#3

AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi

  Alt 2. Aug 2022, 16:21
Mit einem SQL-Server 2018 wird das aber schwierig werden. So einen gibts doch gar nicht.
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
442 Beiträge
 
Delphi 12 Athens
 
#4

AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi

  Alt 2. Aug 2022, 16:30
Wenn es wirklich schnell gehen soll würde ich BULK INSERT verwenden: https://www.mssqltips.com/sqlservert...to-sql-server/
Und so geht das mit Delphi: https://www.delphipraxis.net/209140-...m-schnell.html
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#5

AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi

  Alt 2. Aug 2022, 18:17
Moin...
Zitat:
aber bei dieser Datenmasse ist das zu langsam
...immer wieder die Frage...welche Zeitvorstellung hast du bei 800000 Inserts?
PS:
Nur das Insert oder auch das Laden?
PS:
ADO: Hängt ein Control an der Query welche die Daten lädt? Info: https://www.delphipraxis.net/192080-ado-langsam.html

Geändert von haentschman ( 2. Aug 2022 um 18:20 Uhr)
  Mit Zitat antworten Zitat
LoZe

Registriert seit: 27. Dez 2016
Ort: Ulm
40 Beiträge
 
Delphi 12 Athens
 
#6

AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi

  Alt 2. Aug 2022, 21:18
Wenn es wirklich schnell gehen soll würde ich BULK INSERT verwenden
Vielen Dank für den Tipp ich werde mich da mal einlesen und versuchen das so einzubinden.

Mit einem SQL-Server 2018 wird das aber schwierig werden. So einen gibts doch gar nicht.
oh Stimmt hatte irgendwie einen Dreher Drin, ich habe eine MSSQL Server 2017 (v14.0.) und nutze die SSMS 18.
Danke für den Hinweis ich schau es mir auch mal an.

Moin...
...immer wieder die Frage...welche Zeitvorstellung hast du bei 800000 Inserts?
PS:
Nur das Insert oder auch das Laden?
ich hatte es versucht und nach 10 Minuten Abgebrochen und es waren noch keine 100.000 Daten drin.
also kleiner 10 Minuten wäre schon wünschenswert für ca 800.000 Daten

nur Insert mach Probleme bei der Datenmenge bisher hatte ich noch nie den fall so viele Daten auf einmal einzufügen,
beim Laden mach ich mir keine Sorgen ich hab schon öfter große Datenmengen geladen und die Zeit war angemessen.
Chris

Geändert von LoZe ( 2. Aug 2022 um 21:22 Uhr)
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
442 Beiträge
 
Delphi 12 Athens
 
#7

AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi

  Alt 2. Aug 2022, 21:57
Die Inserts mit Datasets oder gespeicherten Prozeduren sind immer ziemlich langsam. Es kann ja immer nur ein einziger Datensatz gesendet, auf dem Server eingefügt und bestätigt werden, bevor der nächste Datensatz geschickt werden kann. Das kostet Zeit.

Die zweitschnellste Methode nach BULK INSERT / BULK COPY ist m.E., wenn du 1000, 5000 oder 10000 reine INSERT-Befehle in ein einziges Kommando packst und direkt per ADOConnection.Execute('deine 10000 Inserts...') zum Server schickst. Einfach mal ausprobieren, mit wieviel 1000 Datensätzen am Stück die besten Ergebnisse erziehlt werden.
  Mit Zitat antworten Zitat
LoZe

Registriert seit: 27. Dez 2016
Ort: Ulm
40 Beiträge
 
Delphi 12 Athens
 
#8

AW: wie am besten viele Daten schnell in SQL Einfügen mit Delphi

  Alt 2. Aug 2022, 22:25
Okay ich habe jetzt das mit dem BulkCopy eingefügt.
Keine 10 Sekunden, Wahnsinn.

Vielen Dank an Uwe Raabe und Papaschlumpf73
Chris
  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 06:05 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