Chapter 4 Key Takeaways — Quick Reference Card
Catalog Hierarchy
| Component | Function | Key Point |
|---|---|---|
| Master Catalog | Root of catalog hierarchy; one per system | Contains aliases pointing to user catalogs |
| User Catalog | Application-level dataset registry | Separate catalogs reduce contention |
| Alias | Name-to-catalog mapping in master catalog | Multi-level aliases (e.g., CNB.PROD) override single-level (CNB) |
| BCS | Basic Catalog Structure — name/volume mapping | The part you query with LISTCAT |
| VVDS | VSAM Volume Dataset — one per volume | Contains VSAM-specific extent/config info |
Catalog Search Order: HLQ alias in master catalog → user catalog → master catalog itself. (JOBCAT/STEPCAT deprecated.)
SMS Classes at a Glance
| Construct | Controls | Think Of It As |
|---|---|---|
| Storage Class | Performance, availability, I/O priority | "How fast and resilient" |
| Management Class | Backup, migration, retention, expiration | "How protected and how long" |
| Data Class | RECFM, LRECL, BLKSIZE, CI size, free space | "What shape is the data" |
| Storage Group | Volume pool, placement, thresholds | "Where does it physically go" |
ACS Routines assign datasets to classes at allocation time based on dataset name patterns, user ID, and other criteria.
Critical rule: JCL SPACE overrides data class SPACE completely (no merge).
BLKSIZE Optimization (3390 Device)
| LRECL | Optimal BLKSIZE | Records/Track | Track Utilization |
|---|---|---|---|
| 80 | 27920 | 698 | 98.4% |
| 100 | 27900 | 558 | 98.2% |
| 200 | 27800 | 278 | 98.0% |
| 500 | 27500 | 110 | 96.8% |
| 1000 | 27000 | 54 | 95.2% |
Rule: Always specify BLKSIZE explicitly for production. Use system-determined blocksize (BLKSIZE=0) only when you accept the system default.
Impact: Unblocked (BLKSIZE=LRECL) wastes 85-95% of track capacity. Fix block sizes before any other performance tuning.
VSAM Quick Reference
Organization Types
| Type | Key Feature | Primary Use |
|---|---|---|
| KSDS | Indexed by key, B-tree | Master files, lookup tables |
| ESDS | Arrival sequence, append-only | Journals, logs, audit trails |
| RRDS | Access by slot number | Dense numeric key lookups |
| LDS | Byte stream, no records | DB2 tablespaces, data-in-virtual |
Share Options (Cross-Region)
| Value | Meaning | When to Use |
|---|---|---|
| 1 | Exclusive — one job at a time | Maximum integrity, minimum concurrency |
| 2 | One writer + multiple readers | Production standard — batch update + CICS reads |
| 3 | No VSAM integrity | Only with external serialization — avoid |
| 4 | Buffer invalidation | Rarely used; VSAM RLS is the modern alternative |
CI Size Guidelines
| CI Size | Best For |
|---|---|
| 2048-4096 | Random access dominant, small-medium records |
| 4096 | General purpose — good default |
| 8192-16384 | Sequential access dominant, large records |
Buffer Tuning (NSR — Batch)
- BUFNI: Hold entire index set in memory (all levels above sequence set + 1)
- BUFND (sequential): CIs per CA + 1 (allows full CA read)
- BUFND (random): 10-20 for look-aside; diminishing returns beyond that
GDG Essential Rules
| Parameter | Recommended | Avoid |
|---|---|---|
| NOEMPTY | Always | EMPTY (deletes ALL gens at limit) |
| SCRATCH | Short-retention tiers (daily, weekly) | — |
| NOSCRATCH | Long-retention tiers (monthly, annual) | — |
| LIMIT | Match to recovery window + margin | Arbitrary or undocumented limits |
Relative references: Resolved at job initiation for entire job. Use absolute generation names for restart JCL.
Tiered pattern: - Daily: LIMIT=7-14, SCRATCH - Weekly: LIMIT=5-8, SCRATCH - Monthly: LIMIT=12-24, NOSCRATCH - Annual: LIMIT=7-10, NOSCRATCH
Storage Optimization Checklist
- [ ] Block sizes standardized through data classes
- [ ] VSAM free space set based on actual insert rates
- [ ] VSAM reorg scheduled based on split count thresholds
- [ ] HSM migration policies set per management class
- [ ] Pre-batch recall job for migrated critical datasets
- [ ] Capacity monitoring: volume utilization, extent counts, split rates
- [ ] Compression enabled for I/O-bound batch datasets
- [ ] SPACE allocated in CYL with RLSE for output datasets
- [ ] Extent counts monitored (>5 yellow, >16 red)
Critical Formulas
Records per track (3390, FB):
blocks_per_track = floor(56664 / (BLKSIZE + overhead))
records_per_track = blocks_per_track * (BLKSIZE / LRECL)
VSAM records per CI:
records_per_ci = floor((CI_SIZE - 10) / avg_record_size)
(10 bytes for CIDF + RDFs; actual overhead varies)
GDG space estimate:
total_space = num_bases * LIMIT * avg_generation_size
Production Mantras
- "If you can't name it, you can't secure it, manage it, or find it." — Naming conventions are infrastructure.
- "NOEMPTY. Always." — One wrong parameter can delete 30 days of data.
- "The right block size is free performance." — No code changes, just JCL and data classes.
- "SHAREOPTIONS 3 is the Wild West." — Use SHAREOPTIONS 2 or VSAM RLS for integrity.
- "Pre-recall, don't auto-recall." — Proactive HSM recall before the batch window, not during it.
- "Monitor everything. Trust nothing." — Daily capacity reports, weekly VSAM health checks.