PDA

View Full Version : Negative Auswirkungen von ALWMLTTHD(*YES)?



schatte
06-08-15, 12:52
Hallo Leute,

in einer *JOBD oder beim Befehl SBMJOB kann man den Parameter ALWMLTTHD ("Allow multiple threads" / "Mehrere Threads zulassen") auf *YES setzen. Dies ist notwendig, damit übergebene Jobs mehrere Threads erzeugen können.

In der Hilfe des Befehls CRTJOBD zum Parameter ALWMLTTHD steht folgender Auszug:
"Dieses Attribut sollte nur in Jobbeschreibungen auf *YES gesetzt werden, die sich auf Systemfunktionen beziehen, die mehrere Benutzer-Threads erstellen."

Kann mir jemand sagen, ob dieser Parameter negative Auswirkungen haben kann, wenn man nur Cobol oder CL Programme im übergebenen Job verwendet?

Viele Grüße
Matthias

Fuerchau
06-08-15, 13:04
Spätestens beim Einsatz von SQL bieten sich mehrere Threads immer an, da SQL diesbezüglich optimiert.

Christian Bartels
07-08-15, 10:34
Man sollte dabei auf den Systemwert QMLTTHDACN achten: Wenn der auf 3 steht und versucht wird, einen Befehl auszuführen, der als "nicht Threadsafe" eingestuft ist, gibt es einen Fehler. Der Standardwert dieses Systemwertes ist allerdings 2, deshalb sollte es in den meisten Fällen kein Problem geben.

Ich bin mir nicht sicher, ob SQL wirklich mehrere Threads in dem Prozess startet, der die SQL-Anfrage ausführt. Soweit ich mich erinnere, werden im Falle der Parallelverarbeitung interne LIC-Tasks mit dem Namen DBL3... verwendet, der eigentliche Prozess muss dazu nicht Multi-Threaded laufen.

Mit freundlichen Grüßen,
Christian Bartels.

schatte
07-08-15, 13:04
Hallo,

vielen Dank für die Antworten.

Bei mir steht der Systemwert auf 2. Das ist dann auch der Grund, weshalb ich im Joblog schon folgende Meldung gesehen habe:

Weitere Nachrichteninformationen

Nachrichten-ID . . . . : CPD000D Bewertung . . . . . . : 30
Nachrichtenart . . . . : Information
Sendedatum . . . . . . : 07.08.15 Sendezeit . . . . . . : 06:04:01

Nachricht . . . : Befehl *LIBL/RMVLNK nicht sicher für Job mit mehreren
Threads.
Ursache . . . . : Der aktuelle Job enthält mehrere Threads. Der Befehl
*LIBL/RMVLNK kann nicht sicher in einem Job mit mehreren Threads ausgeführt
werden. Aktion 2 wird ausgeführt. Aktionen:
2 -- Die Verarbeitung des Befehls wird fortgesetzt.
3 -- Diese Nachricht folgt auf Abbruchnachricht CPF0001. Die
Befehlsverarbeitung wird beendet.
Fehlerbeseitigung: Der Befehl darf nicht in einem Job mit mehreren Threads
ausgeführt werden.
Technische Beschreibung . . . . : Befehle, die für Threads nicht sicher
ausgeführt werden können, sollten nicht in einem Job mit mehreren Threads
Weitere ...
Eingabetaste --> Weiter

F3=Verlassen F6=Drucken F9=Nachrichtendetails anzeigen F12=Abbrechen
F21=Unterstützungsstufe auswählen



Daher besser aus Sicherheitsgründen Jobs ohne Multithreading mit ALWMLTTHD(*NO) ausführen lassen.
Wobei ich mich schon wundere, dass Systembefehle wie RMVLNK und CPYFRMIMPF nicht Threadsafe sind.

Viele Grüße
Matthias

Fuerchau
07-08-15, 13:34
Die Meldung ist auch nur eine Warnung.
Klar ist, dass ich nur mit API's bzw. C++ überhaupt Threads erstellen kann.
Dann muss ich auch für Synchronisation zwischen Threads sorgen.
Ich denke nicht, dass IBM die vielen 1000de Programme threadsave neu entwickelt hat.
Die Warnung kommt überhaupt nur, wenn der Job Threads hat und das ist bei mir nur bei bestimmten Funktionen in SQL der Fall und tritt auch meist nur in ODBC-Jobs auf.