Many users of z/OS systems have SMF data dumped out to a GDG when a MANx dataset fills up. At some pre-defined time, often at or just after midnight, a final SMF dump is forced, then the all the datasets in a GDG represent “yesterdays” data. This has traditionally been fine for z/OS sites that are not particularly large or busy. Anything more than a moderate size will mean this data volume is significant and takes a lot of time and resources to process.
The DYNAGDG= parameter allows a user to give control of what data is processed to Acquire if that data is in a GDG. By telling Acquire to dynamically and intelligently decide what to process through a day, users can spread out the processing burden and potentially get data into Syncsort Capacity Management more quickly.
The format of the parameter card is : DYNAGDG=datasetnamestem[,NOINFO]
datasetnamestem should be the name of a GDG, without the final qualifier. For example if your SMF data is dumped to PROD.SMF.DATA.G0001V00, PROD.SMF.DATA.G0002V00, PROD.SMF.DATA.G0003V00, etc. then datasetnamestem would be PROD.SMF.DATA.
By default, Acquire will open and read the first two records from each file and print the dates and times of each one in the job log. Adding the ,NOINFO option prevents it from doing this.
When using DYNAGDG= Acquire requires the addition of a 1-track file to its JCL under the //LASTGDG DD name. This is used to store the dataset name and date and time of the last RMF interval processed. This is used to determine where to start on a subsequent run of Acquire, and automatically sets the SDATE= and STIME= parameters (providing they have not been explicitly provided by the user).
The flow of processing is like this:
First run at say 08:00
DYNAGDG=PROD.SMF.DATA parameter is supplied by the user
//LASTGDG is a new and empty file
Datasets in existence:
PROD.SMF.DATA.G0001V00PROD.SMF.DATA.G0002V00
PROD.SMF.DATA.G0003V00
Acquire will read //LASTGDG and see it is empty. It will then obtain a list of datasets starting with PROD.SMF.DATA.* from the catalog and allocate/concatenate all datasets in the correct order to //SMFDATA. Acquire will then process them as normal. At the end of the run, //LASTGDG will be updated with (say):
PROD.SMF.DATA.G0003V00 05JUL16 07:00:00
Second run at say 15:00
DYNAGDG=PROD.SMF.DATA parameter is supplied by the user
//LASTGDG contains PROD.SMF.DATA.G0003V00 05JUL16 07:00:00
Datasets in existence:
PROD.SMF.DATA.G0001V00PROD.SMF.DATA.G0002V00
PROD.SMF.DATA.G0003V00PROD.SMF.DATA.G0004V00
PROD.SMF.DATA.G0005V00PROD.SMF.DATA.G0006V00
PROD.SMF.DATA.G0007V00PROD.SMF.DATA.G0008V00
Acquire will read //LASTGDG and see it contains data. It will then list all the available datasets starting PROD.SMF.DATA and dynamically allocate PROD.SMF.DATA.G0003V00 through PROD.SMF.DATA.G0008V00, setting SDATE=05JUL16 and STIME=070000. Acquire will then process as normal. At the end of the run, //LASTGDG will contain (say):
PROD.SMF.DATA.G0007V00 05JUL16 14:15:00
Third run at say 21:00
DYNAGDG=PROD.SMF.DATA parameter is supplied by the user
//LASTGDG contains PROD.SMF.DATA.G0003V00 05JUL16 14:15:00
Datasets in existence:
PROD.SMF.DATA.G0001V00PROD.SMF.DATA.G0002V00
PROD.SMF.DATA.G0003V00PROD.SMF.DATA.G0004V00
PROD.SMF.DATA.G0005V00PROD.SMF.DATA.G0006V00
PROD.SMF.DATA.G0007V00PROD.SMF.DATA.G0008V00
PROD.SMF.DATA.G0009V00PROD.SMF.DATA.G0010V00
Acquire will read //LASTGDG and see it contains data. It will then list all the available datasets starting PROD.SMF.DATA and dynamically allocate PROD.SMF.DATA.G0008V00 through PROD.SMF.DATA.G0010V00, setting SDATE=05JUL16 and STIME=141500. Acquire will then process as normal. At the end of the run, //LASTGDG will contain (say):
PROD.SMF.DATA.G0010V00 05JUL16 20:15:00
Fourth run at say 00:10 after a midnight “cut off”
DYNAGDG=PROD.SMF.DATA parameter is supplied by the user
//LASTGDG contains PROD.SMF.DATA.G0010V00 05JUL16 20:45:00
Datasets in existence:
PROD.SMF.DATA.G0001V00PROD.SMF.DATA.G0002V00
PROD.SMF.DATA.G0003V00PROD.SMF.DATA.G0004V00
PROD.SMF.DATA.G0005V00PROD.SMF.DATA.G0006V00
PROD.SMF.DATA.G0007V00PROD.SMF.DATA.G0008V00
PROD.SMF.DATA.G0009V00PROD.SMF.DATA.G0010V00
PROD.SMF.DATA.G0011V00
Acquire will read //LASTGDG and see it contains data. It will then list all the available datasets starting PROD.SMF.DATA and dynamically allocate PROD.SMF.DATA.G0010V00 through PROD.SMF.DATA.G0011V00, setting SDATE=05JUL16 and STIME=204500. Acquire will then process as normal. At the end of the run, //LASTGDG will contain (say):
PROD.SMF.DATA.G0011V00 06JUL16 00:00:00
If a job then resets (deletes) the PROD.SMF.DATA GDG and clears out the //LASTGDG file, then “todays” processing is ready to go again.
-
Acquire will automatically take all datasets if:
-
//LASTGDG is empty
-
The dataset name in //LASTGDG does not match anything in the list of datasets returned from the catalog
See the DYNACOL1 and DYNACOL2 sample JCL members for examples.