Anmelden

View Full Version : SETOBJACC



Seiten : 1 [2] 3

Fuerchau
18-03-16, 11:32
Und wenn sowieso genügend Speicher für sowas zur Verfügung steht dann wird der Standardcache des OS sicherlich schon ausreichen.
Ich hatte das früher mal (V2R2) verwendet als die Platten noch sehr langsam waren und konnte damit Performance gewinnen. Allerdings hatten wir das ausschließlich auf die Indizes beschränkt.

BenderD
18-03-16, 12:17
... nur so am Rande vermerkt; bei sequentieller Verarbeitung wird alles nur einmal gelesen, da bringt ein cache nix...

hel400
18-03-16, 14:17
Da irren Sie sich, Hr. Bender!

Die Funktion "Expert Cache" funktioniert nämlich so:
Das OS "beobachtet", ob ein Job Daten aus einer Datei in sequentieller Reihenfolge liest.
Ist dies der Fall, dann liefert der Expert Cache den nächsten Datenpuffer von Platte in den Hauptspeicher, noch bevor(!!) der entsprechende READ vom jeweiligen Pgm kommt.
(daher sollte man den Expert Cache auch nur in den Pools einschalten, in denen vorwiegend Batchverarbeitung stattfindet, also *BASE).

Bei den heutigen Platten-Zugriffszeiten rückt dieser "Booster" natürlich immer weiter in den Hintergrund, kann in bestimmten Fällen aber immer noch Einiges bringen.

BenderD
18-03-16, 14:38
... das ist prefetching, nicht caching und wann und wie das passiert, m.W. nicht wirklich dokumentiert. Davon ab bringt das wenig, da ja grundsätzlich Blöcke geholt werden und das dann maximal pro Block einen synchronous read zum asynchronous read macht. Caching kann erheblich was bringen für Daten, die mehrfach in kurzer Zeit gebraucht werden, für Indexe z.B. aber auch da ist die Wahrscheinlichkeit durch Eingriffe Verschlechterungen zu produzieren nicht aus dem Auge zu verlieren.

D*B

Fuerchau
18-03-16, 15:47
Sobald ich Dateien als I-Dateien verarbeite und einen READ statt Chain verwende wird sowieso geblockt gelesen. Somit kann ich durchaus viele 1000 Sätze pro Sekunde verarbeiten.
Schau mal bei WRKACTJOB auf die CPU-Zeit im Verhhältnis zur Anzahl IO's.
Wenn es immer am IO läge müsste ich in 1 Sekunde schon mehrere 1000 IO's gemacht haben.
Meist (wie oben schon gesagt) wird eher lange rungerechnet als großartig IO durchgeführt oder es werden Daten gelesen die auf grund eines Filters nicht relevant sind.
Hier hilft dann eher eine LF mit dem passenden Schlüssel (von mir auch Select/Omit) um diese Sätze gar nicht erst zu lesen.
Manchmal könnte bei solchen Programmen tatsächlich SQL helfen.

woodstock99
18-03-16, 18:25
@hel400

man sollte also ein subsystem anlegen mit wert Paging Option USRDFN und sollte dann z.b. im cl mit chgsbsd eine grösse die man benötigt anlegen . danach den pool clearen und das subsystem wieder beenden . habe ich das so halbwegs richtig zusammengefasst ?

wie gesagt evtl bringts was ?!??.

woodstock99
18-03-16, 18:32
@fuerchau

ja man könnte sehr viel rausholen wenn man diesen Monsterjob redesignen würde . aber a habe ich die zeit nicht und b bekomme ich sie auch nicht dieses monster komplett neu zu programmieren . that's the big problem .. mit minimalsten aufwand versuchen irgendwas zu zaubern :(. ich habe nur mit einem sehr kleinen teil gestet (laufzeit 30 min) die komplette laufzeit und die anzahl reads willst du gar nicht wissen :)). hab sowas noch nie gesehen ...

hel400
18-03-16, 19:07
... das ist prefetching, nicht caching und wann und wie das passiert, m.W. nicht wirklich dokumentiert. Davon ab bringt das wenig, da ja grundsätzlich Blöcke geholt werden und das dann maximal pro Block einen synchronous read zum asynchronous read macht. Caching kann erheblich was bringen für Daten, die mehrfach in kurzer Zeit gebraucht werden, für Indexe z.B. aber auch da ist die Wahrscheinlichkeit durch Eingriffe Verschlechterungen zu produzieren nicht aus dem Auge zu verlieren.

D*B


Sobald ich Dateien als I-Dateien verarbeite und einen READ statt Chain verwende wird sowieso geblockt gelesen. Somit kann ich durchaus viele 1000 Sätze pro Sekunde verarbeiten.
Schau mal bei WRKACTJOB auf die CPU-Zeit im Verhhältnis zur Anzahl IO's.
Wenn es immer am IO läge müsste ich in 1 Sekunde schon mehrere 1000 IO's gemacht haben.
Meist (wie oben schon gesagt) wird eher lange rungerechnet als großartig IO durchgeführt oder es werden Daten gelesen die auf grund eines Filters nicht relevant sind.
Hier hilft dann eher eine LF mit dem passenden Schlüssel (von mir auch Select/Omit) um diese Sätze gar nicht erst zu lesen.
Manchmal könnte bei solchen Programmen tatsächlich SQL helfen.


Da irrt Ihr beide!
(oder anders gesagt "da unterschätzt Ihr beide diese Funktion"!)
Nochmals:
Der "Expert Cache" macht genau das, was ich oben beschrieb habe, nämlich die Analyse der Zugriffe im laufenden Betrieb und - wenn möglich - eine Optimierung der Plattenzugriffe.

Wer's nicht glauben mag, kann direkt beim Erfinder nachlesen:
http://www-01.ibm.com/support/docview.wss?uid=nas8N1015953




@hel400

man sollte also ein subsystem anlegen mit wert Paging Option USRDFN und sollte dann z.b. im cl mit chgsbsd eine grösse die man benötigt anlegen . danach den pool clearen und das subsystem wieder beenden . habe ich das so halbwegs richtig zusammengefasst ?

wie gesagt evtl bringts was ?!??.

Ja, so in etwa. Also SBS nicht mit *SHRPOOLn sondern mit Größenangabe anlegen (oder mit CHGSBSD, genau), in diesen Pool kann man dann mit SETOBJACC die gewünwchten Objekte reinstellen.
Nach ENDSBS ist der Platz automatisch wieder freigegeben.

BenderD
18-03-16, 21:58
... angegebene Quellen immer selber sorgfältig lesen!!! Der Haupteffekt von expert cache ist die dynamische Steuerung der Blockgrößen, sprich: wenn Ressourcen CPU und I/O frei sind, werden größeren Blöcke reingeholt, in der (vagen) Hoffnung, dass damit synchronous reads gespart werden.
Bei angenommenen Tausend Sätzen pro Block liegen die erreichbaren Verbesserungen bei sequentiellen Zugriffen unter 1%, wenn denn die Trefferrate optimal ist.
Die einfache Gegenstrategie, segmentieren und parallelisieren ist da ungleich effektiver (auf Mehrprozessor Maschinen allemal), erfordert allerdings software technische Eingriffe.

D*B

hel400
18-03-16, 22:54
... angegebene Quellen immer selber sorgfältig lesen!!! Der Haupteffekt von expert cache ist die dynamische Steuerung der Blockgrößen, sprich: wenn Ressourcen CPU und I/O frei sind, werden größeren Blöcke reingeholt, in der (vagen) Hoffnung, dass damit synchronous reads gespart werden.
Bei angenommenen Tausend Sätzen pro Block liegen die erreichbaren Verbesserungen bei sequentiellen Zugriffen unter 1%, wenn denn die Trefferrate optimal ist.
Die einfache Gegenstrategie, segmentieren und parallelisieren ist da ungleich effektiver (auf Mehrprozessor Maschinen allemal), erfordert allerdings software technische Eingriffe.

D*B

Ach gottchen Hr. Bender, was soll denn das?

In meinem Beitrag #10 schreibe ich, dass der Expert Cache versucht, die Lesevorgänge zu optimieren.
Das hat Ihnen nicht gefallen (obwohl das zu 100% mit der IBM-Beschreibung übereinstimmt).

Daher habe ich das in meinem Beitrag #13 so präzisiert, dass "der nächste Datenpuffer gelesen wird, noch bevor er angefordert wird".
Sie zitieren nun die IBM-Beschreibung, dass (bei freien Ressourcen CPU u. IO) größere Blöcke reingeholt werden.
Das ist ja genau das, was ich (anders formuliert) geschrieben habe ...

Warum der OS-Entwickler die möglichen Performanceverbesserungen als "particularly impressive" bezeichnet und Sie diese aber nur mit "unter 1%" bewerten, möchte ich nicht diskutieren.
Weiters möchte ich darauf hinweisen, dass ich auch nicht behauptet habe, dass der Expert Cache das Allheilmittel ist sondern (ursprünglich) nur erklärt habe, was die Angaben *FIXED und *CALC bewirken, nämlich genau das von mir Beschriebene!!