[Allegro] a99-Tempo im Netz

Thomas Berger ThB at Gymel.com
Mo Aug 15 17:27:43 CEST 2005


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Lieber Herr Allers,

> Der Zustand ist durch Messung belegbar: die Flexdatei, die wir seit 
> Jahren für die Messung der Geschwindigkeit der a99-Prozesse 
> benutzen (siehe meine andere kürzlich an die Liste gesandte 
> Nachricht), gibt als für die Erledigung der Prozesse der 
> Mess-Flexdatei erforderliche Zeit 3 1/2 Minuten an. Der gleiche 
> Ablauf dauert auf einem Einzelplatz-PC 2 Sekunden, auf dem Netz der 
> Zentrale des Goethe-Instituts in München ca. 15 Sekunden, auf 
> einigen wenigen Goethe-Netzen im Ausland, wo ich das messen konnte, 
> ungefähr anderthalb Minuten.

Ich habe mit Ihrem Test-Flex einmal in verschiedenen Konstellationen
herumgespielt, und folgende Beobachtungen gemacht:

(a99-Problem): Die "disp"-Statements werden erst dann zuverlaessig
ausgefuehrt, wenn man nach Starten von a99 und vor Aufruf des Flex
mindestens einmal im Index war. Ansonsten werden nur wenige Datensaetze
angezeigt und auch nicht das ganze a99-Fenster aktualisiert, was im
Zeitverhalten der Ausfuehrung je nach Konstellation einen Faktor 2-4
ausmachen kann.

[Problem mit Ihrem Test-Flex: Es wird 100 mal der identische
Datensatz gespeichert, warum Sie ihn ueberhaupt modifizieren, ist
unklar: Schreiboperationen in den Index sollten bei Ihrem Test nicht
vorkommen, es wird eigentlich nur die Lesegeschwindigkeit, das Tempo
beim Anhaengen an die Logdatei sowie die Performanz beim Sperren der
Satztabelle getestet. Letztere ist vermutlich einer der wichtigsten
Faktoren ueberhaupt, sollte aber vielleicht besser mit separaten Tests
ermittelt werden, die das spezialisierte "set tbl loc" nutzen]

Deaktiviere ich die put-Statements, muss ich keycheck-Anweisungen
einbauen, damit (auch wenn der Index bereits geoeffnet worden war)
die Anzeige konsistent aktiviert wird.

Ich habe Ihren Test so umgestrickt, dass 500 verschiedene Saetze
mit aufeinanderfolgenden Satznummern jeweils die #24 bekommen und
unmittelbar darauf wiederhergestellt werden: Das scheint mir etwas
realistischer und reduziert wohl auch den Einfluss von Netzwerk-Caches.
Halbwegs realistisch (fuer *Bearbeitungen*) ist, dass nur wenige
Schluessel geaendert werden. Halbwegs unrealistisch ist, dass die
zu aendernden Saetze in der Datenbank (und daher meist auch in der
zugrundeliegenden .cLD-Datei) aufeinander folgen. Sehr unrealistisch
ist, dass stets dieselbe Aenderung gemacht wird.

Der Test muss mindestens zwei mal durchgefuehrt werden, beim ersten
Mal kann es durch die Verlaengerung der Datensaetze zu
Umspeichervorgaengen kommen, die u.U. sehr zeitaufwendig sind.
Solche Umspeichervorgaenge gehoeren zwar in ein realisitisches
Szenario, sind aber in Tests sehr schwer zu kontrollieren.

Der Test als solcher ermoeglicht zwar den Vergleich von ~irgendwas~
in verschiedenen Konstellationen, hilft aber nicht bei der Diagnose.

Variation von "display" bzw. "put"-Anweisungen ermoeglicht vorsichtige
Aussagen zur Lesegeschwindigkeit in der Datenbank (Nachladungen!)
und evtl. zur Schreibgeschwindigkeit (hier wuerde ich aber einen Test
mit Update und GM-Parametern vorziehen): Fuer ein "disp" muessen
v14-Ersetzungen mindestens einmal durchgefuehrt werden (jedoch auch
fuer evtl. explizit nachgeladene Saetze), fuer ein "put" stets genau
zweimal (Indexschluessel werden fuer die Varianten "vorher" bzw.
"nachher" des Datensatzes errechnet). Die eigentliche Verarbeitungszeit
fuer die Parameterdateien (mit Ausnahme von Nachladungen) halte ich fuer
vernachlaessigbar, die Systemzeit fuer die Anzeige des Satzes im Fenster
und die Aktualisierung aller a99-Anzeigen koennte hingegen einen
Einfluss haben.

Als Anzeigeparameter sollte man moeglichst einmal die Internanzeige
waehlen und dann die realen Anzeigeparamter, um die Effekte von
expliziten Nachladungen messen zu koennen.

Variation der Datensaetze (stets derselbe vs. viele verschiedene)
hilft evtl. dabei, Caching-Effekte beim Lesen zu minimieren.

Die Server- und Netzwerklast ausserhalb von allegro mag gerade in
Ihrer Situation einen ziemlichen Einfluss haben, dies kann man
vermutlich nur durch Tests zu unterschiedlichen Tages- und
Nachtzeiten dokumentieren.

Vor dem Durchfuehren sinnvoller Tests muss man (mit Mitteln des
Betriebssystems und weiterer Tools, z.B. filemon) sicherstellen,
dass man weiss, welche Aktivitaeten gerade die Dateien zur Datenbank
im Zugriff haben (ein "haengengebliebenes" Backup kann so ziemlich
jede Maschine in den Keller ziehen).



> Der Dialog mit den Netzadministratoren ist mal wieder minimal, 
> beschränkt sich auf deren Feststellung "... es liegt nicht am Netz, 
> nicht an den Leitungen, sondern an Allegro." Die wissen also 

Aussagen ueber Leitungen koenn ueblicherweise nur Spezialfirmen
mit entsprechender Testhardware machen: Ein Knick in einem Kabel
reicht, und alle koennen scheinbar unbeeintraechtigt mit Word arbeiten,
Datenbanken hingegen sind ploetzlich 10mal langsamer oder werden
instabil.


> beneidenswerterweise Bescheid, und ich bin vollkommen hilflos, kann 
> der Behauptung, daß der Umstand, daß das, was auf einem 
> Einzelplatz-PC 2 Sekunden dauert, in einem bestimmten Netz 3 1/2 
> Minuten braucht, allein in Allegro seine Ursache hat, wenig 
> entgegensetzen, weil ich vom Netzgeschehen verflixt wenig, in 
> Anbetracht der Umstände zu wenig, weiß.

Hier mal ein paar Messungen zum Vergleich
(jeweils 500 Saetze jeweils 2x gespeichert, nach jedem Speichern
"display", d.h. 1000 Schreib- und Anzeigevorgaenge: Die "kleine
Datenbank" ist die Demo-Datenbank, die "grosse Datenbank" ist
wirklich gross insbesondere mit 1,5GB grosser .cDX-Datei und
hat v.a. viele v14-Verknuepfungen. In der "kleinen" Datenbank
bewirkt die Modifikation an #24 die Aenderung eines Schluessels,
in der "grossen" von zweien)

			     klein	      gross
lokal 500 mal derselbe Satz ohne Modifikation zweifach gespeichert:
ln01	disp ohne put		  3		  3	
ln10	put ohne disp		  5		 11
ln11	put und disp		  6		 14

netz 500 mal derselbe Satz ohne Modifikation zweifach gespeichert,
Datenbank exklusiv:
nn01	disp ohne put		  2		  3
nn10	put ohne disp		 17		 73
nn11	put und disp		 19		 79

netz 500 mal derselbe Satz ohne Modifikation zweifach gespeichert,
Datenbank von anderem Rechner mit PRESTO geoeffnet:
sn01	disp ohne put		 42		 60
sn10	put ohne disp		 39		537
sn11	put und disp		 90		606	


lokal 500 mal derselbe Satz mit und ohne Modifikation gespeichert:
ls01	disp ohne put		  2		  4
ls10	put ohne disp		  5		 12
ls11	put und disp		  7		 16

netz 500 mal derselbe Satz mit und ohne Modifikation gespeichert,
Datenbank exklusiv:
ns01	disp ohne put		  2		  4
ns10	put ohne disp		 19		 80
ns11	put und disp		 20		 83

netz 500 mal derselbe Satz mit und ohne Modifikation gespeichert,
Datenbank von anderem Rechner mit PRESTO geoeffnet:
ss01	disp ohne put		 42		 59
ss10	put ohne disp		 57		559
ss11	put und disp		100		637


lokal 500 verschiedene Saetze mit und ohne Modifikation gespeichert:
lv01	disp ohne put		  3		  4
lv10	put ohne disp		  8		 11
lv11	put und disp		 10		 13

netz 500 verschiedene Saetze mit und ohne Modifikation gespeichert,
Datenbank exklusiv:
nv01	disp ohne put		  4		  4
nv10	put ohne disp		 23		 72
nv11	put und disp		 26		 76

netz 500 verschiedene Saetze mit und ohne Modifikation gespeichert,
Datenbank von anderem Rechner mit PRESTO geoeffnet:
sv01	disp ohne put		 39		 35
sv10	put ohne disp		 68		534
sv11	put und disp		107		558


Alle Zeitangaben in Sekunden. Es wurden jeweils zwei
Testlaeufe unmittelbar hintereinander ausgefuehrt, die
Zeiten des zweiten notiert: Umspeichereffekte sind daher
ausgeschlossen, Caching-Effekte maximiert.

Erste Schlussfolgerungen:
* Die Tests .s.. und .v.. sind nicht gut miteinander vergleichbar:
  Theoretisch sollte .s.. etwas schneller sein, der Einfluss der
  Tatsache, dass voellig unterschiedliche Datensaetze mit einer
  stark abweichenden durchschnittlichen Anzahl von v14-Ersetzungen
  stoert insbesondere die Zahlen fuer die "grosse" Datenbank.

* Vergleich n... und s... zeigt, dass auch Leseoperationen
  sehr stark beeintraechtigt sind, sobald die Datenbank von
  einem anderen Prozess auch nur (zum Schreiben) geoeffnet ist.

* Vergleich .n.. und .s.. zeigt, dass Schreibzugriffe auf den
  Index einen messbaren Unterschied machen. In realen Bearbeitungs-
  situationen wird dieser Einfluss staerker sein, letztendlich
  sogar ueberwiegen, vor allem bei Neusaetzen.

* Uebergang von "Lokal" auf "Netz" *sowie* von "Netz" auf "Netz
  mit anderen Datenbankzugriffen" bedeutet je nach Datenbankgroesse
  und Art der Daten *jeweils* eine Verlangsamung um den Faktor
  3 - 8, zusammengenommen also ca. 10 - 65, der sich bei realistischeren
  Schreiboperationen wegen der hoeheren Zahl von schreibenden
  Indexzugriffen sogar noch verschlechtern wird.

  Dies wohlgemerkt in einem Netzwerksetting, wo Client, Server und
  Leitungen mit nichts anderem als der Abwicklung dieser Tests
  beschaeftigt waren. In realen Netzwerken mag es daher noch weitere
  Verschlechterungen geben, die aber vermutlich nicht mehr besonders
  gravierend sind: Erreicht der Netzwerkverkehr eine Saettigung,
  ist zu erwarten, dass die Performance fuer alles drastisch einbricht,
  vom Server ist auch davon auszugehen, dass er bezueglich
  Arbeitsspeicher ausreichend dimensioniert ist um Lesezugriffe schnell
  bedienen zu koennen und dass Schreiboperationen nicht ueberwiegen
  (Kopiere ich auf dem Server nebenbei ein paar Gigabyte durch die
  Gegend, bricht die Performance des Serverdienstes recht dramatisch
  ein). Aus dem Bauch heraus wuerde ich maximal einen Faktor 5
  fuer die zusaetzliche Verlangsamung unter realistischer Last
  annehmen, alles dareuber fiele nach meiner Meinung dann bereits
  unter "Probleme" mit Netzwerk oder Server.

Die von Ihnen angegebenen 15 Sekunden im Goethe-Netz vs. 90 Sekunden
bei anderen Instituten (jeweils fuer die 100 Operationen in Ihren Tests,
nicht fuer 1000 in meinen Tests .n..) lassen sich moeglicherweise auf
den Unterschied zwischen "exklusiv" bzw. "geoeffnet von anderen
Plaetzen" in Kombination mit unterschiedlicher Server- und Netzbelastung
zurueckfuehren (Die 79 bei Test nn11 fuer die "grosse" Datenbank und die
90 bei Test sn11 fuer die "kleine" Datenbank sind zu nahe beeinander:
Man kann aufgrund des Testergebnisses nicht auf die Testsituation
zurueckschliessen). Dass jedoch in einer weiteren Installation noch
einmal mehr als doppelt so lange braucht, hat entweder seinen Grund in
einer bestimmten Auspraegung des Testes 26 (evtl. eine hoehere Zahl
expliziter Nachladungen, die sich beim "disp" stark auswirken) oder aber
es hat Gruende ausserhalb von allegro. Letztendlich muessen Sie aber
mit identischen Kopien einer Referenzdatenbank testen, um vergleichbare
Ergebnisse zu bekommen, das zeigen die Spalten "klein" und "gross"
meiner Messungen eigentlich recht eindrucksvoll.

viele Gruesse
Thomas Berger
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3-nr1 (Windows XP)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFDALRvENVh3bB0lwMRAgouAJ9glUfWfo1zJ18QayHk12vyPeSp4ACdEoCc
GLtqIAac3sDCZDFV6BkPLcM=
=peGn
-----END PGP SIGNATURE-----



Mehr Informationen über die Mailingliste Allegro