The TRACKS parameter in DEFINE CLUSTER specifies how much space to allocate for a VSAM cluster (or for its data or index component) in tracks. You give a primary quantity (initial allocation in tracks) and an optional secondary quantity (tracks added per extension). A track is a single physical track on DASD—on a 3390 it is about 56 KB. TRACKS gives you finer granularity than CYLINDERS (one cylinder is 15 tracks on a 3390), so it is often used for smaller datasets or for the index component of a KSDS. This page explains TRACKS(primary secondary), where you can specify it, how it compares to CYLINDERS and RECORDS, and when to choose TRACKS.
TRACKS(primary [secondary]) tells the system to allocate space in track units. Primary is the number of tracks allocated when the cluster is first created. When the dataset needs more space, the system requests an extension of secondary tracks (if you specified secondary). So primary is the initial size in tracks, and secondary is the size of each extension in tracks. If you omit secondary, the behavior is system-dependent (e.g. no extension or a default). TRACKS is an alternative to CYLINDERS and RECORDS; you use exactly one of these space units for a given component.
You can specify TRACKS at the cluster level or in the DATA and INDEX subparameters, just like CYLINDERS. At the cluster level, the value applies to the whole cluster. For a KSDS it is common to specify space in DATA and INDEX separately: for example TRACKS for the index (small) and CYLINDERS for the data (large), or TRACKS for both if both are small.
| Level | Effect |
|---|---|
| Cluster level | TRACKS(primary secondary) after the cluster name applies to the whole cluster. For a KSDS the system splits space between data and index; for ESDS/RRDS it is all for the data component. |
| DATA | In DATA(NAME(...) TRACKS(primary secondary)). Allocates the data component in tracks. Use when the data component is small or you want track-level control. |
| INDEX | In INDEX(NAME(...) TRACKS(primary secondary)). Allocates the index component in tracks. Common for KSDS index, which is usually small (e.g. tens of tracks). |
TRACKS allocates in track units. CYLINDERS allocates in cylinder units (each cylinder is multiple tracks). RECORDS(primary secondary) specifies an estimated number of records; the system converts to tracks or cylinders using record size and control interval size. The following table summarizes when each is used.
| Parameter | Typical size (3390) | When to use |
|---|---|---|
| TRACKS | ~56 KB per track (3390) | Small datasets, index components, fine granularity. |
| CYLINDERS | ~850 KB per cylinder (3390, 15 tracks) | Large datasets, simpler allocation. |
| RECORDS | Converted from record count and RECORDSIZE/CISZ | When you think in number of records. |
For a small index component, TRACKS(30 15) might allocate 30 tracks initially and 15 per extension—enough for many KSDS indexes without wasting a full cylinder. For a large data component, CYLINDERS(100 50) is easier to reason about and avoids large track counts.
On IBM 3390 DASD, one track holds 56,664 bytes (about 56 KB). One cylinder consists of 15 tracks, so one cylinder is about 850 KB. When you specify TRACKS(15 15), you are allocating roughly one cylinder worth of space (15 tracks) for primary and again for each secondary extension. So TRACKS and CYLINDERS are related by the device geometry; choose the unit that matches how you think about the dataset size (tracks for small or precise, cylinders for large).
123456789DEFINE CLUSTER ( - NAME(MY.SMALL.KSDS) - INDEXED - RECORDSIZE(80 80) - KEYS(8 0) - TRACKS(50 25)) - DATA (NAME(MY.SMALL.KSDS.DATA)) - INDEX (NAME(MY.SMALL.KSDS.INDEX))
This allocates 50 tracks primary and 25 tracks secondary for the whole cluster. The system divides the space between the data and index components. For more control, specify TRACKS (or CYLINDERS) in DATA and INDEX separately.
12345678DEFINE CLUSTER ( - NAME(MY.APPL.KSDS) - INDEXED - RECORDSIZE(200 500) - KEYS(12 0)) - DATA (NAME(MY.APPL.KSDS.DATA) CYLINDERS(50 25)) - INDEX (NAME(MY.APPL.KSDS.INDEX) TRACKS(40 20))
The data component is allocated in cylinders (50 primary, 25 secondary)—suitable for a large data component. The index component is allocated in tracks (40 primary, 20 secondary)—enough for the index without allocating whole cylinders. This mix is common when the index is small relative to the data.
Primary should reflect how much space you need at creation (or after initial load). Secondary should be large enough to limit the number of extensions (each extension has overhead and may fragment allocation) but not so large that you reserve unused space. For TRACKS, typical values might be in the tens or low hundreds for small components; for large components you might use CYLINDERS instead.
Imagine a parking lot. A track is one row of spaces. A cylinder is a whole section of rows (like 15 rows). TRACKS is like saying "give me 20 rows to start, and when I need more, add 10 rows." That is good when you only need a few rows (a small file or the index). CYLINDERS is like saying "give me 5 whole sections"—better when you need a lot of space (the big data file).
1. What does TRACKS(20 10) mean?
2. Why use TRACKS instead of CYLINDERS for a small index?
3. Roughly how many tracks are in one 3390 cylinder?