AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken PreparedStatement - wie lange gültig?
Thema durchsuchen
Ansicht
Themen-Optionen

PreparedStatement - wie lange gültig?

Ein Thema von romber · begonnen am 19. Jan 2013 · letzter Beitrag vom 20. Jan 2013
Antwort Antwort
romber

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

PreparedStatement - wie lange gültig?

  Alt 19. Jan 2013, 16:34
Datenbank: MS SQL Server • Version: 2008 • Zugriff über: UniDAC
Hallo!

Über eine API erhalte ich sehr viele Daten, die ich in eine Tabelle auf dem SQL Server hinzufügen muss. Die Intensität des Datenstroms ist immer unterschiedlich, es können bis zu 250 Datensätze pro Sekunde sein oder nur 100 pro Stunde. Ich benutze PreparedStatements in Verbindung mit UniDAC, um die Tabelle mit Daten zu befüllen. In einem Datencontainer sammeln sich die Daten, die für den Insert bestimmt sind. Dann prüfe ich mit einem bestimmten Interval, ob irgendwelche Daten da sind, führe ein Prepare-Funktion aus und füge die Datensätze einzeln nacheinander hinzu. Eigentlich funktioniert alles ganz gut und ohne Probleme.

Nun bin ich dabei, die Insertion-Funktion noch ein bisschen zu optimieren. Da habe ich mir überlegt, ob ich die Prepare-Funktion nicht jedesmal vor der Insert-Schreife ausführe, sondern z.B. ein Mal pro Stunde oder sogar nur ein Mal beim Start des Programms. Denn aktuell ist es so, dass durch meine oben beschriebene Vorgehensweise die Prepare-Funktion oft bis zu 50 Mal pro Minute ausgeführt wird, wodurch das Ganze, wenn auch nicht direkt bemerkbar, etwas langsamer wird.

Wie lange ist ein PreparedStatement gültig? Wird es reichen, wenn ich es nur ein Mal beim Start des Programmst ausführe? DB-Dienst und das Programm laufen auf dem selben PC.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: PreparedStatement - wie lange gültig?

  Alt 19. Jan 2013, 17:09
Da es eine Funktionalität des DBMS ist, vermute ich mal, dass sie für die Sitzung Bestand hat.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

AW: PreparedStatement - wie lange gültig?

  Alt 19. Jan 2013, 18:02
Wie lange ist ein PreparedStatement gültig? Wird es reichen, wenn ich es nur ein Mal beim Start des Programmst ausführe?
Wenn du es nicht wieder unpreparest oder die Db-Connection beendest - ewig.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
romber

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

AW: PreparedStatement - wie lange gültig?

  Alt 19. Jan 2013, 19:26
Vielen Dank!
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#5

AW: PreparedStatement - wie lange gültig?

  Alt 20. Jan 2013, 08:29
SQL Server geht da sogar noch einen Schritt weiter. SQL Server hat selbst auch einen PLAN CACHE, d.h. auch wenn du im Client ein Unprepare machst (oder die Connection schließt), behält sich der SQL Server eine kompilierte Fassung des Statements inkl. Ausführungsplan in seinem Cache für eine spätere Wiederverwendung.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: PreparedStatement - wie lange gültig?

  Alt 20. Jan 2013, 09:03
Wenn Du maximale Performance haben willst, dann versuche doch mal die Variante mit 'BULK INSERT'. Dabei erzeugst Du mit deinen Daten eine Text-Datei und lässt den SQL-Server diese dann per o.g. Befehl einlesen. So kommt man schnell auf 10.000 Datensätze pro Sekunde.

Ich hoffe, Du verwendest einen Workerthreadpool, um die Spitzen abzufangen? Denn dann kann es dir ziemlich egal sein, wie schnell deine Daten eintrudeln.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

AW: PreparedStatement - wie lange gültig?

  Alt 20. Jan 2013, 09:37
Wenn Du maximale Performance haben willst, dann versuche doch mal die Variante mit 'BULK INSERT'. Dabei erzeugst Du mit deinen Daten eine Text-Datei und lässt den SQL-Server diese dann per o.g. Befehl einlesen. So kommt man schnell auf 10.000 Datensätze pro Sekunde.
Die (fast) gleiche Geschwindigkeit erreicht man auch wenn man da prepared Statement auch mit mehreren Inserts (z.B. 100 - je nach anzahl der Parameter des Inserts) aufbaut.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
romber

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

AW: PreparedStatement - wie lange gültig?

  Alt 20. Jan 2013, 15:19
Ich hoffe, Du verwendest einen Workerthreadpool, um die Spitzen abzufangen? Denn dann kann es dir ziemlich egal sein, wie schnell deine Daten eintrudeln.
Ich weiss nicht mal, was das ist. Werde mich jetzt schlau machen, auch bezüglich des BULK INSERT. Ich dachte die ganze Zeit, schneller als mit PreparedStatement geht's kaum...
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#9

AW: PreparedStatement - wie lange gültig?

  Alt 20. Jan 2013, 17:09
Hi,

Stell Dir vor, Du hast ein Array, in das Du einfach die zu speichernden Daten auf der einen Seite reinstopfst, und auf der anderen Seite sind lauter Threads, die jeweils ein Paket abholen und in die DB speichern.

Dann können punktuell ruhig mal ein paar 1000 Datensätze pro Sekunde reinkommen. Denn es macht ja nichts, wenn dann die Liste kurzzeitig mal wächst, denn auf der anderen Seite hast Du ja deine Threads, die die Daten im Hintergrund abholen, wenn mal weniger zu tun ist.
  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 20:39 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