![]() |
Datenbank: MS SQL Server • Version: 2008 • Zugriff über: UniDAC
PreparedStatement - wie lange gültig?
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. |
AW: PreparedStatement - wie lange gültig?
Da es eine Funktionalität des DBMS ist, vermute ich mal, dass sie für die Sitzung Bestand hat.
|
AW: PreparedStatement - wie lange gültig?
Zitat:
|
AW: PreparedStatement - wie lange gültig?
Vielen Dank!
|
AW: PreparedStatement - wie lange gültig?
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.
|
AW: PreparedStatement - wie lange gültig?
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. |
AW: PreparedStatement - wie lange gültig?
Zitat:
|
AW: PreparedStatement - wie lange gültig?
Zitat:
|
AW: PreparedStatement - wie lange gültig?
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09: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