Frage zu buffering strategie

17/09/2009 - 16:20 von tom knauf | Report spam
Moin, moin

folgende Frage an die SQL/FOX Spezialisten :

Ich habe eine Remoteview deren Parameter eine Ergebnismenge von ca. 30.000
(aus ca. 2.000.000) Datensàtzen vom SQL-Server holen.
Auf dieser RV werden dann quasi exclusiv Prozesse ausgeführt, die einige
10.000 Skips und einige 1000 Änderungen bewirken,
derselbe Record wird evt. mehrmals in verschiedenen Abschnitten geàndert.
Zum Schluss kommt ein explizites tableupdate(.t.,.t.)

Frage
Die SQL-Daten , die hinter der View stehen sind für die Laufzeit des
Programms isoliert, werden also nicht von anderen Prozessen geàndert.
Macht es aus Performancegründen Sinn, die RV von (Standard) Buffering =3 auf
Buffering=5 zu setzen ?

Danach müsste ja nicht mehr jedes Skip auch ein Tableupdate() auslösen, das
sollte schneller sein
Am Ende des Programms steht natürlich ein tableupdate(.t.,.t.,"alias")

Verstàndnisfrage
Löst so wie in der Hilfe beschrieben bei Buffering =3 jedes Skip auch ein
Tableupdate() gegen den SQL-Server aus ?
(Sollte ja nur ein record sein, aber Overhead gibt es ja trotzem)

Bringt set sqlbuffering da noch mehr speed (bei SQLabfragen auf die
Remoteview) ?


Danke schön für Eure Hilfe
Tom

Tests sind schwierig, die Userzahl hat scheinbar einen großen Einfluss
darauf, sodaß nachvollziehbare echte Test schwer sind.
 

Lesen sie die antworten

#1 Stefan Wuebbe
17/09/2009 - 22:24 | Warnen spam
tom knauf wrote:
Moin, moin

folgende Frage an die SQL/FOX Spezialisten :

Ich habe eine Remoteview deren Parameter eine Ergebnismenge von ca. 30.000
(aus ca. 2.000.000) Datensàtzen vom SQL-Server holen.
Auf dieser RV werden dann quasi exclusiv Prozesse ausgeführt, die einige
10.000 Skips und einige 1000 Änderungen bewirken,
derselbe Record wird evt. mehrmals in verschiedenen Abschnitten geàndert.
Zum Schluss kommt ein explizites tableupdate(.t.,.t.)

Frage
Die SQL-Daten , die hinter der View stehen sind für die Laufzeit des
Programms isoliert, werden also nicht von anderen Prozessen geàndert.
Macht es aus Performancegründen Sinn, die RV von (Standard) Buffering =3 auf
Buffering=5 zu setzen ?

Danach müsste ja nicht mehr jedes Skip auch ein Tableupdate() auslösen, das
sollte schneller sein



Genau, jede Verbindungsaufnahme + Datenübertragung kostet Zeit.

Am Ende des Programms steht natürlich ein tableupdate(.t.,.t.,"alias")



"Einige Tausend" gepufferte Sàtze sind m.E. zu viel - VFP selbst wird je
nach Bedingungen ab n gepufferten Sàtzen stark ausgebremst. Aber wenn in
deinen Tests die passende Grenze gefunden hast, und statt jedem
einzelnen nur noch 50 oder 100 Blöcke per TableUpdate() übertràgst,
würde ich bestimmt bessere Performance erwarten.


Verstàndnisfrage
Löst so wie in der Hilfe beschrieben bei Buffering =3 jedes Skip auch ein
Tableupdate() gegen den SQL-Server aus ?
(Sollte ja nur ein record sein, aber Overhead gibt es ja trotzem)



Abgesehen vom o.g., ist das Problem eher, dass die impliziten
TableUpdates bei Zeilen-Pufferung keinen auswertbaren Rückgabewert
liefern, auf den du mit AError() reagieren kannst.
Buffering 3 macht m.E. nur Sinn, wenn du sicherstellen kannst, dass gar
keine Änderungen stattfinden, oder sich der Datensatzzeiger auf keinen
Fall bewegt.


Bringt set sqlbuffering da noch mehr speed (bei SQLabfragen auf die
Remoteview) ?



Ich glaube nicht, da es sich m.E. auf Abfragen von "lokalen" DBFs bezieht.




hth
-Stefan

Ähnliche fragen