[Allegro] Speicherverzögerung bei update
Thomas Berger
ThB at Gymel.com
Mo Okt 5 10:57:17 CEST 2015
Am 05.10.2015 um 10:19 schrieb Bernhard Eversberg:
> Am 05.10.2015 09:54, schrieb Thomas Berger:
>>
>> Ich habe mir noch einmal angesehen, wie "if usr" (if use?) implementiert
>> ist, und kann nur dringend davon abraten, das haeufig (also etwa wie
>> hier vorgeschlagen anlaesslich des Speicherns jedes Datensatzes in
>> einem Update) auszufuehren. Auch kann es gut sein, dass dieser Test
>> zu einer Verlangsamung fuehrt, die vom erwarteten Gewinn (*keine*
>> Zwangsverzoegerung um eine Sekunde) einiges auffrisst.
>>
> Das sind offenkundig nur Mutmaßungen.
> Eine Testschleife mit 1000x if usr ... braucht 1 Sekunde.
z=1000
:loop
var "no"
if usr var "yes"
ins $
var z ": " $ n
Write iV
z-1
var z
if z>0 jump loop
Hier im Netz 10 Sekunden. Und wenn ich zwei dieser Jobs
parallel laufen lasse, dauert es ueber 650 Sekunden (sie hatten
stark unterschiedliches Tempo, liefen nur etwa 700 Versuche
lang gleichzeitig; wg. zwei Jobs ist es vielleicht legitim, das
Ergebnis durch zwei zu teilen) vor allem aber bekomme in ca.
30% der Faelle eine sehr haessliche (und ernst zu nehmende)
Fehlermeldung bla\bla.tbl cannot be opoened ...
Wie schon oft erwaehnt, ist "if usr" so implementiert, dass die
Datenbank komplett geschlossen wird, dann wird versucht sie
zu zerstoeren, wenn da keiner etwas gegen hat und also die
Zerstoerung gelingt, wird versucht sie wiederherzustellen, dann
wieder geoeffnet und weiter im Text. Das ist eine sehr teure Operation,
zudem noch hoechst gefaehrlich und vermutlich (je nach Netzwerk-
betriebsystem) noch nicht einmal besonders zuverlaessig...
viele Gruesse
Thomas Berger
Mehr Informationen über die Mailingliste Allegro