AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Ausführung einer StoredProcedure sehr langsam
Thema durchsuchen
Ansicht
Themen-Optionen

Ausführung einer StoredProcedure sehr langsam

Ein Thema von Gor1 · begonnen am 31. Aug 2011 · letzter Beitrag vom 2. Sep 2011
Antwort Antwort
Seite 2 von 2     12   
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Ausführung einer StoredProcedure sehr langsam

  Alt 31. Aug 2011, 22:47
Hallo,

warum sollte es an den Komponenten liegen ?
Vor allem bei so einem grossen Unterschied.

Wie sieht denn der Query-Plan aus ?

Bei Tests sollte auch folgendes beachtet werden ?

1. Start ist immer die gleiche DB (also vorher kopieren)
2. DB kopieren
3. Neustart des Rechners (+ Servers)
4. Test 1
6. DB kopieren
7. Neustart des Rechners (+ Servers)
8. Test 2


Heiko
Heiko

Geändert von hoika (31. Aug 2011 um 22:59 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#12

AW: Ausführung einer StoredProcedure sehr langsam

  Alt 1. Sep 2011, 00:21
DELETE FROM TABELLE1 WHERE PARAM1 NOT IN (SELECT DISTINCT PARAM1 FROM TABELLE2)
Was soll dabei rauskommen? Was ist Param1? Ein SP Parameter, z.b. 20 oder 42? Ein Feldname?
42 wäre dann gebunden:
DELETE FROM TABELLE1 WHERE 42 NOT IN (SELECT DISTINCT 42 FROM TABELLE2)

Wenn es ein Feldname wäre, statt eines Parameters, dann ist doch die Frage, wie das Mengengerüst aussieht.
Die Frage nach der Reproduzierbarkeit wurde ja schon gestellt.

Ich bin kein Firebird Experte, aber das Statement kommt mir sehr merkwürdig vor.

Wie siehts im Client mit Transaktionen aus? Wird hier vielleicht nicht nur commited, sondern noch die Transaktionskomponente benutzt?
Das wäre für mich ein Indikator für große Performance Einbrüche im Vergleich zu einem nackten SP Aufruf auf dem Server.
Gruß, Jo
  Mit Zitat antworten Zitat
Gor1

Registriert seit: 11. Mai 2011
32 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Ausführung einer StoredProcedure sehr langsam

  Alt 1. Sep 2011, 15:03
Nochmal zur Klarstellung:
Param1 ist ein (Integer-)Feld sowohl in Tabelle1 als auch in Tabelle2. In Tabelle1 liegen Daten, die zu einem oder mehreren Datensätzen in Tabelle2 gehören und die Zuordnung erfolgt über Param1.
Es gibt jetzt eben Fälle, in denen Datensätze aus Tabelle2 gelöscht werden.
Danach sollen die Datensätze aus Tabelle1 herausgelöscht werden, die keinen zugeordneten Datensatz in Tabelle2 mehr haben (also verwaist sind) und das ist was der DELETE-Befehl machen soll.

Die Ergebnisse sind sowohl im Delphi als auch in Flamerobin reproduzierbar und auch wenn ich mein Delphi-Programm direkt ohne IDE starte, bekomme ich die gleichen Laufzeiten. Die Datenbank ist immer die gleiche und bei der Datenbank, die ich benutzt habe, gibt es keine verwaisten Einträge in Tabelle1, so dass sich die Datenbank auch bei mehrmaligem Aufruf des DELETE-Befehls nicht ändert.

Die Datenbank-Datei ist lokal auf meinem Rechner, der Firebird-Server ist auch lokal installiert, so dass das Netzwerk eigentlich keine Rolle spielen dürfte.

Ich verwende eine TSQLQuery und eine TSQLConnection und schicke das Kommando mit ExecSQL an den Server.

Ich bin noch ein Datenbank-Neuling, deshalb verstehe ich nicht, was mit Query-Plan und mit Transaktionskomponente gemeint ist.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Ausführung einer StoredProcedure sehr langsam

  Alt 1. Sep 2011, 15:55
Ich würde auf jeden Fall Fremschlüsselbeziehung erstellen und in ihr u.U. eine Löschregel hinterlegen, dann wird der abhängige Datensatz automatisch gelöscht.
Markus Kinzler
  Mit Zitat antworten Zitat
Gor1

Registriert seit: 11. Mai 2011
32 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Ausführung einer StoredProcedure sehr langsam

  Alt 2. Sep 2011, 10:22
Ich würde auf jeden Fall Fremschlüsselbeziehung erstellen und in ihr u.U. eine Löschregel hinterlegen, dann wird der abhängige Datensatz automatisch gelöscht.
Wie legt man eine Fremschlüsselbeziehung an? Kannst du mir das erklären oder hast du einen Link dazu?

In diesem Fall ist das keine 1:1-Verknüpfung, d.h. es kann sowohl in Tabelle1 als auch in Tabelle2 mehrere Datensätze mit dem gleichen Param1 geben (und die Datensätze in Tabelle1 dürfen nur dann gelöscht werden, wenn es keinen Datensatz in Tabelle2 mit diesem Param1 gibt).
Es ist auch möglich, dass in Tabelle2 alle Datensätze mit einem bestimmten Param1 gelöscht wurden, aber dann später neue Datensätze mit diesem Param1 hinzugefügt werden. Deshalb soll die Tabelle1 nur dann bereinigt werden, wenn das von außen angestoßen wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 04:49 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