AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Import einer grossen Tabelle - Optimierung
Thema durchsuchen
Ansicht
Themen-Optionen

Import einer grossen Tabelle - Optimierung

Ein Thema von idefix2 · begonnen am 12. Jun 2010 · letzter Beitrag vom 12. Jun 2010
Antwort Antwort
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Import einer grossen Tabelle - Optimierung

  Alt 12. Jun 2010, 11:31
Datenbank: Firebird • Version: 2.1 • Zugriff über: UIB
Ich möchte viele Daten in eine Firebird Datenbank importieren, die Haupttabelle hat etwas über 100000 Datensätze, drei Nebentabellen vielleicht je ca 20000.

Ich lese jeweils eine Zeile aus dem Importfile ein und erzeuge dann einen datensatz in der haupttabelle und maximal einen Datensatz in jeder der drei anderen Tabellen (mittels update or insert Statement). Zu jedem erzeugten Datensatz in jeder dieser Tabellen wird ein weiterer Datensatz mittels Trigger in einer 5. Tabelle erzeugt.

Ich bilde mir ein, alle nötigen Indizes erstellt zu haben. Trotzdem wird das Programm mit zunehmender Tabellengrösse dramatisch langsamer. Was kann man machen, um das zu verhindern?

Natürlich sind die Indizes bei der Erstellung auf eine leere Datenabnk hin "optimiert". Wäre es sinnvoll, alle paar Tausend Datensätze die Indizes zwecks Optimierung neu zu erstellen?

Wie wirkt sich die Transaktionsgrösse aus? Ich starte alle 500 Importzeilen (in Summe ca 2000 inserts in die verschiedenen Tabellen) eine neue Transaktion.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

AW: Import einer grossen Tabelle - Optimierung

  Alt 12. Jun 2010, 13:34
Ich bilde mir ein, alle nötigen Indizes erstellt zu haben. Trotzdem wird das Programm mit zunehmender Tabellengrösse dramatisch langsamer. Was kann man machen, um das zu verhindern?
Definiere trastisch? Wie schaut die Transaktionsverwaltung aus? (Alles Imports in einer Transaktion) Wie schaut der verfügbare Speicher der DB aus (Richtiger dedizierter Server oder "läuft so nebenbei auf Enwicklungsrechner"? Festplatten-System (0815 SATA oder RAID)? ...

Natürlich sind die Indizes bei der Erstellung auf eine leere Datenabnk hin "optimiert". Wäre es sinnvoll, alle paar Tausend Datensätze die Indizes zwecks Optimierung neu zu erstellen?
Bei einer normalen DBMS ist das nicht nötig. Nur wenn ein DBMS "mist" beim Aufbau des Index macht ist sowas nötig.

Wie wirkt sich die Transaktionsgrösse aus? Ich starte alle 500 Importzeilen (in Summe ca 2000 inserts in die verschiedenen Tabellen) eine neue Transaktion.
Kommt auf die Ressourcenparameter der DB an (Verfügbarer RAM, Geschwindigkeit Festplattensystem, ...)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#3

AW: Import einer grossen Tabelle - Optimierung

  Alt 12. Jun 2010, 15:13
wobei man bei einem Import die Indices normalerweise ausschaltet und erst nach dem Import wieder aktiviert. Dadurch dürfte der eigentliche Import schneller laufen. FKs würde ich eventuell nicht ausschalten, das kommt dann immer auf die Daten an.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

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

AW: Import einer grossen Tabelle - Optimierung

  Alt 12. Jun 2010, 16:08
Wenn Du aus den zu importierenden Daten ohne großen Aufwand eine Textdatei erstellen kannst, sollte bulk insert die schnellste Möglichkeit sein.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#5

AW: Import einer grossen Tabelle - Optimierung

  Alt 12. Jun 2010, 19:48
Danke für die Antworten - Das Problem hat sich erledigt - meine eigene Dummheit: Wenn man bei einem Update Statement auf die Where Klausel vergisst, dann tut so ein Befehl bei jedem Aufruf viel mehr, als man sich vorstellt, und zwar umso mehr mehr, je voller die Tabellen sind
  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 05:07 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