Autor Beitrag
subw00fer
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 05.09.03 10:24 
Halli Hallo!

Die Situation sieht folgender Maßen aus:

Ich habe auf meiner Datenbank(AS400) mehrere Tabellen, auf die ich mit einem TQUERY zugreife und die Daten in ein Textfile übertrage. Mit den Schlüsseln der ersten Tabelle suche ich in einer zweiten Tabelle die gesuchten Datensatz, wobei einer ca. 460 Felder besitzt. und schreibe diesen gefundenen in die Textfile.

Nun mein Problem:

Es sind einige Tausend Sätze. Die einzelnen Abfragen(TQuery) bewegen sich im Millisekundenbereich, aber bei ca. jeden 60ten Satz benötigt das TQuery ca. 40 Sekunden. Da diese Situation sehr oft autritt brauche ich min. 30 Minuten länger und ich weiss nicht wie ich dieses Phänomen unterbinde.

Es sind nie die gleichen Datensätze die das jeweilige TQuery verzögern.

Kann mir jemand helfen?

mfg subw00fer

P.S.:Kann es sein, dass diese Abfragen den Buffer vollschreiben und nach einer gewissen Grösse wird dieser geloschen -> Zeitverzögerung?
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Fr 05.09.03 12:35 
subw00fer hat folgendes geschrieben:
P.S.:Kann es sein, dass diese Abfragen den Buffer vollschreiben und nach einer gewissen Grösse wird dieser geloschen -> Zeitverzögerung?


Da bin ich mir sogar ziemlich sicher, daß das so ist. Bzw. ist die Page in der DB dann voll. Bei 460 Feldern und einer Pagesize von standardmäßig 4 kb kriegst du nicht viele da auf einmal rein. Bei solch großen Datensätzen wäre es zu überlegen da etwas mit anderen Werten rumzuexperimentieren. Eine andere Datenstruktur wäre aber wohl das Beste. Die 460 Felder brauchst Du wohl nicht alle gleichzeitig im Zugriff, oder doch?

_________________
Gruß
Hansa
subw00fer Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 08.09.03 08:30 
Hallo!

Nocheinmal die Situation:

Ich lese den ersten Datensatz aus der ersten Tabelle und schreibe in sofort in ein Textfile. Mit einen Schlüssel vom ersten Datensatz gehe ich zur nächsten Tabelle und lese den gesuchten Datensatz aus und schreibe ihn in das Textfile, danach gehe ich zur nächsten Tabelle mit dem gleichen schlüssel,usw. Nur einen Tabelle liegt dazwischen, die 460 Felder besitzt und ich muss sie(Felder) auf einmal auslesen. Es funktioniert ja auch perfekt, doch ca. jeder 60te macht Probleme.

Wenn der Buffer das Problem macht. Kann ich ihn nicht jedes mal irgendwie leeren?
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Mo 08.09.03 13:11 
welchen Puffer willst du Leeren? Den der DB (Cache) oder den der Anwendung?, desweiteren schätze ich, dass da noch diverse Parameter des Netzwerkes ne Rolle spielen dürften, als auch die verwendeten (ODBC-?) Treiber.
Interessant dürfte es sein, bei wieviel Bytes Ttransfervolumen dieses Phänomen auftritt. Anhand eines solchen Mittelwertes kann es u.U. sinnvoll sein an der DB resp. Anwendung oder Treiber zu drehen.

eine allgemeine Lösung kann dir hier glaube ich keiner Geben.

grez
msch

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Mo 08.09.03 13:24 
Wie gesagt, meiner Meinung nach hilft nur experimentieren mit der DB-PageSize. Anscheinend passen im Moment genau 60 Datensätze da rein. Was aber auch bedeutet, daß die DB die Daten sammelt und dann speichert. Wird die PageSize verringert, so dürfte dieses "stocken" verringert/unmerkbar sein. Insgesamt gesehen wäre es aber langsamer. Wie bei Pech und Schwefel halt. Ein Netzwerk hat auch so eine Pagesize. Damit habe ich schon experimentiert konnte aber keine Änderung feststellen.

_________________
Gruß
Hansa
subw00fer Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 08.09.03 14:20 
Ich fragte unsere As400-Spezialisten wegen der DB-PageSize, die haben leider auch nichts positives herausbekommen.

Habe es nun anders gelöst. Verwende ein select * auf die grosse Datei mit den 460 Feldern und schreibe jeden Satz in ein dynamisches Array.

Ergebnis: Von mehr als 3 Stunden Laufzeit auf weniger als 30 Minuten gekürzt.

Danke trotzdem.

mfg subw00fer

P.S.: Ist zwar umständlich, aber es funktioniert!