Virtual Storage Access Method (VSAM) is an IBM DASD file storage access method, first used in the OS/VS1, OS/VS2 Release 1 (SVS) and Release 2 (MVS) operating systems, later used throughout the Multiple Virtual Storage (MVS) architecture and now in z/OS. Originally a record-oriented filesystem, VSAM comprises four data set organizations: key-sequenced (KSDS), relative record (RRDS), entry-sequenced (ESDS) and linear (LDS). The KSDS, RRDS and ESDS organizations contain records, while the LDS organization (added later to VSAM) simply contains a sequence of pages with no intrinsic record structure, for use as a memory-mapped file.

Overview
An IBM Redbook named "VSAM PRIMER" (especially when used with the "Virtual Storage Access Method (VSAM) Options for Advanced Applications" manual) explains the concepts needed to make use of VSAM. IBM uses the term data set in official documentation as a synonym of file, and direct access storage device (DASD) because it supported other devices similar to disk drives.

VSAM records can be of fixed or variable length. They are organised in fixed-size blocks called Control Intervals (CIs), and then into larger divisions called Control Areas (CAs). Control Interval sizes are measured in bytes for example 4 kilobytes while Control Area sizes are measured in disk tracks or cylinders. Control Intervals are the units of transfer between disk and computer so a read request will read one complete Control Interval. Control Areas are the units of allocation so, when a VSAM data set is defined, an integral number of Control Areas will be allocated.

The Access Method Services utility program IDCAMS is commonly used to manipulate ("delete and define") VSAM data sets. Custom programs can access VSAM datasets through Data Definition (DD) statements in Job Control Language (JCL), via dynamic allocation or in online regions such as in Customer Information Control System (CICS).

Both IMS/DB and Db2 are implemented on top of VSAM and use its underlying data structures.

VSAM files
The physical organization of VSAM data sets differs considerably from the organizations used by other access methods, as follows.

A VSAM file is defined as a cluster of VSAM components, e.g., for KSDS a DATA component and an INDEX component.

Control Intervals and Control Areas
VSAM components consist of fixed length physical blocks grouped into fixed length control intervals (CI) and control areas (CA). The size of the CI and CA is determined by the Access Method Services (AMS), and the way in which they are used is normally not visible to the user. There will be a fixed number of control intervals in each control area.

A control interval normally contains multiple records. The records are stored within the control interval starting from the low address upwards. Control information is stored at the other end of the control interval, starting from the high address and moving downwards. The space between the records and the control information is free space. The control information comprises two types of entry: a control interval descriptor field (CIDF) which is always present, and record descriptor fields (RDF) which are present when there are records within the control interval and describe the length of the associated record. Free space within a CI is always contiguous.

When records are inserted into a control interval, they are placed in the correct order relative to other records. This may require records to be moved out of the way inside the control interval. Conversely, when a record is deleted, later records are moved down so that the free space remains contiguous. If there is not enough free space in a control interval for a record to be inserted, the control interval is split. Roughly half the records are stored in the original control interval while the remaining records are moved into a new control interval. The new control interval is taken from a pool of free control intervals within the same control area as the original control interval. If there is no remaining free control interval within that control area, the control area itself is split and the control intervals are distributed equally between the old and the new control areas.

You can use three types of record-orientated file organization with VSAM (the contents of linear data sets have no record structure):

Sequential VSAM organization

An ESDS may have an index defined to it to enable access via keys, by defining an Alternate Index. Records in ESDS are stored in order in which they are written by address access. Records are loaded irrespective of their contents and their byte addresses cannot be changed.

Indexed VSAM organization

A KSDS has two parts: the index component and the data component. These may be stored on separate disk volumes.

While a basic KSDS only has one key (the primary key), alternate indices may be defined to permit the use of additional fields as secondary keys. An Alternate Index (AIX) is itself a KSDS.

The data structure used by a KSDS is nowadays known as a B+ tree.

Relative VSAM organization

An RRDS may have an index defined to it to enable access via keys, by defining an Alternate Index.

Linear VSAM organization 

An LDS is an unstructured VSAM dataset with a control interval size of a multiple of 4K. It is used by certain system services.

VSAM Data Access Techniques 
There are four types of access techniques for VSAM data:

 Local Shared Resources (LSR), is optimised for "random" or direct access. LSR access is easy to achieve from CICS.
 Global Shared Resources (GSR)
 Non-Shared Resources (NSR), which is optimised for sequential access. NSR access has historically been easier to use than LSR for batch programs.
 Distributed File Management (DFM), an implementation of a Distributed Data Management Architecture server, enables programs on remote computers to create, manage, and access VSAM files.

Sharing VSAM data
Sharing of VSAM data between CICS regions can be done by VSAM Record-Level Sharing (RLS). This adds record caching and, more importantly, record locking. Logging and commit processing remain the responsibility of CICS which means that sharing of VSAM data outside a CICS environment is severely restricted.

Sharing between CICS regions and batch jobs requires Transactional VSAM, DFSMStvs. This is an optional program that builds on VSAM RLS by adding logging and two-phase commit, using underlying z/OS system services. This permits generalised sharing of VSAM data.

History
VSAM was introduced as a replacement for older access methods and was intended to add function, to be easier to use and to overcome problems of performance and device-dependence. VSAM was introduced in the 1970s when IBM announced virtual storage operating systems (DOS/VS, OS/VS1 and OS/VS2) for its new System/370 series, as successors of the DOS/360 and OS/360 operating systems running on its System/360 computer series. While backwards compatibility was maintained, the older access methods suffered from performance problems due to the address translation required for virtual storage.

The KSDS organization was designed to replace ISAM, the Indexed Sequential Access Method. Changes in disk technology had meant that searching for data in ISAM data sets had become very inefficient. It was also difficult to move ISAM data sets as there were embedded pointers to physical disk locations which became invalid if the data set was moved. IBM also provided a compatibility interface to allow programs coded to use ISAM to use a KSDS instead.

The RRDS organization was designed to replace BDAM, the Basic Direct Access Method. In some cases, BDAM data sets contained embedded pointers which prevented them from being moved. However, most BDAM data sets did not and the incentive to move from BDAM to VSAM RRDS was much less compelling than that to move from ISAM to VSAM KSDS.

Linear data sets were added later, followed by VSAM RLS and then Transactional VSAM.

See also 
 Job Control Language (JCL)
 IBM mainframe utility programs
 ISAM
 Geneva ERS
 Record Management Services, a similar system developed by Digital Equipment Corporation
 Enscribe, a similar system developed by Tandem Computers

Notes

References 

 VSAM Demystified
 DFSMStvs Overview and Planning Guide

IBM mainframe operating systems
IBM file systems
Computer file formats
가상 기억 접근 방식(Virtual Storage Access Method, VSAM)은 OS/VS1, OS/VS2 릴리즈 1(SVS), 릴리즈 2(MVS) 운영 체제에 최초로 사용되었고 나중에 다중 가상 스토리지(MVS) 아키텍처를 통해 현재는 z/OS에서 사용되는 IBM 디스크 파일 스토리지 접근 방식이다. VSAM은 KSDS(Key Sequenced Data Set), RRDS(Relative Record Data Set), ESDS(Entry Sequenced Data Set), LDS(Linear Data Set)라는 4가지 데이터 셋이 있다. KSDS, RRDS, ESDS 조직에는 레코드를 포함하고 있지만 LDS 조직(나중에 VSAM에 추가됨)은 단순히 메모리 맵 파일로 사용하기 위해 본질적인 레코드 구조가 없는 일련의 페이지만 포함한다.

IBM은 공식 문서에서 데이터 셋(data set)이라는 용어를 파일(file)로, DASD는 디스크 드라이브와 유의어로 사용하고 있다.

IDCAMS라는 접근 방식 서비스 유틸리티는 VSAM 데이터셋을 조작(삭제 및 정의)하는데 흔히 사용된다.

IMS/DB와 DB2 둘 다 VSAM 상에 구현되어 있으며 기반이 되는 자료 구조를 사용한다.

VSAM 파일 
물리적인 VSAM 데이터셋 조직은 다른 접근 방식이 사용하는 조직들에 견주어 상당한 차이점이 있다.

VSAM 데이터셋은 CI(제어 구간: control interval)와 CA(제어 구역: control area)를 이루고 있다. CI와 CA의 크기는 일반적으로 접근 방식에 의해 결정되며 이들이 어떻게 쓰이는지는 사용자에게 보이지 않는다. 각각의 제어 구역(CA)에는 고정된 수의 제어 구간(CI)이 있다.

제어 구간은 일반적으로 여러 레코드를 포함하고 있다. 이 레코드들은 낮은 주소에서부터 위쪽으로 제어 구간 안에 저장된다. 제어 정보는 제어 구간의 반대편 끝에서부터 아래로 저장된다. 레코드와 제어 정보 사이의 공간은 여유 공간이다. 제어 정보는 두 개의 엔트리를 이룬다: 늘 존재하는 CIDF(제어 구간 서술자 필드: control interval descriptor field), 제어 구간에 레코드가 있고 연관 레코드의 길이를 기술할 때 존재하는 RDF(레코드 서술자 필드: record descriptor field). CI 안의 여유 공간은 언제나 순차적이다.

레코드들이 제어 구간에 삽입될 때, 이 레코드들은 다른 레코드들에 상대적으로 정확한 순서에 위치된다. 이 경우 레코드들이 제어 구간을 향해 위쪽으로 이동되어야 한다. 반대로 하나의 레코드가 삭제되면 나중에 레코드들은 아래로 내려감으로써 여유 공간이 순차적으로 남게 된다. 삽입할 레코드에 대한 제어 구간 안에 여유 공간이 충분하지 않으면 제어 구간은 분할된다. 거의 절반의 레코드들이 원래의 제어 구간에 저장되고, 남아있는 레코드들은 새로운 제어 구간으로 이동된다. 새로운 제어 구간은 원래의 제어 구간과 동일한 제어 구간 내의 여유 제어 구간들의 풀에서 가져온다. 해당 제어 구역 안에 남아있는 여유 제어 구간이 없다면 제어 구역은 알아서 분할되며 제어 구간들은 오래된 제어 영역과 새로운 제어 영역 사이에 동등하게 분배된다.

VSAM으로 세 종류의 레코드 지향 파일 조직을 사용할 수 있다(선형 데이터셋/LDS의 내용에는 레코드 구조가 없다):

순차 VSAM 조직

엔트리 순차 데이터셋(ESDS, Entry Sequenced Data Set)은 대체 색인(Alternate Index)을 정의함으로써, 키를 통한 접근을 활성화하도록 색인을 정의할 수 있다. ESDS 안의 레코드들은 주소 접근을 통해 만들어진 순서대로 저장된다. 레코드들은 자신들의 내용에 상관 없이 로드되며 이들의 바이트 주소는 변경되지 않는다.

색인 VSAM 조직 

키 순차 데이터셋(KSDS, Key Sequenced Data Set)은 두 부분으로 나뉜다: 색인 요소(index component), 데이터 요소(data component) 이들은 각기 다른 디스크 볼륨에 저장된다.

기본 KSDS가 하나의 기본 키만을 갖고 있지만 대체 지수를 정의하여 추가 필드를 보조 키로 사용할 수 있게 허용시킬 수 있다. 대체 색인 (AIX)은 그 자체가 KSDS이다.

KSDS가 사용하는 데이터 구조는 오늘날 B+ 트리로 알려져 있다.

상대적 VSAM 조직 

상대적 레코드 데이터셋(RRDS, Relative Record Data Set)은 대체 색인(Alternate Index)을 정의함으로써, 키를 통한 접근을 활성화하도록 색인을 정의할 수 있다.

선형 VSAM 조직 
선형 데이터셋(LDS, Linear Data Set)은 여러 4K의 제어 구간 크기가 있는, 구조화되지 않은 VSAM 데이터셋이다. 특정한 시스템 서비스에 사용된다.

VSAM 데이터 접근 기술 
VSAM 데이터의 접근 기술에는 3가지 종류가 있다.
 LSR (Local Shared Resources, 지역 공유 자원)
 GSR (Global Shared Resources, 전역 공유 자원)
 NSR (Non-Shared Resources, 비공유 자원)

이들은 각기 다른 접근 패턴에 최적화되어 있다. 이를테면 LSR은 임의 또는 직접 접근 방식에 최적화되어 있는 반면 NSR은 순차 접근에 최적화되어 있다.

이 밖에도 특정한 실행 및 프로그래밍 환경에서 일부 접근 기술들을 더 이용할 수 있다는 점이 다르다. 이를테면 LSR 접근은 CICS로부터의 보관(아카이브)이 쉬운 반면 NSR 접근은 역사적으로 LSR에 비해 배치 프로그램을 사용하기 더 쉽다.

VSAM 데이터 공유 
CICS 구역(region) 간에 VSAM 데이터를 공유하는 일은 VSAM RLS(Record-Level Sharing, 레코드 수준 공유)가 처리한다. 레코드 캐시 기능과 레코드 잠금 기능을 추가한다. 로그 및 커밋 처리는 CICS가 떠맡음으로써 CICS 환경 밖의 VSAM 데이터 공유는 엄격하게 제한된다.

CICS 구역과 배치 잡 사이에 공유할 때에는 DFSMStvs라는 트랜잭셔널 VSAM을 요구한다.

이는 기반이 되는 z/OS 시스템 서비스를 이용하여 로그 기능 및 2PC 커밋을 추가함으로써 VSAM RLS 상에 빌드하는 선택적 프로그램이다. 이를 통해 VSAM 데이터의 일반화된 공유를 가능케 한다.

역사 
VSAM은 성능 및 장치 의존성 문제를 극복하고 쉽게 사용할 수 있게 할 목적으로 구형 접근 방식을 대체하고 새로운 기능을 추가하기 위해 도입되었다. VSAM은 IBM이 새로운 시스템/370 시리즈를 위한 DOS/VS, OS/VS1, OS/VS2라는 가상 스토리지 운영 체제를 발표한 1970년대에 모습을 드러냈다. 하위 호환성을 유지하였으나 구형 접근 방식들은 가상 기억장치에 필요한 주소 변환으로 인해 성능 문제를 일으켰다.

KSDS 조직은 ISAM(색인 순차 접근 방식)을 대체하기 위해 설계되었다. 디스크 기술 변화로 말미암아 ISAM 데이터셋의 데이터를 검색하는 일은 매우 비효율적인 일이 되었다. ISAM 데이터셋을 이동하는 것도 어려운 일이었는데, 데이터가 이동되면 유효하지 않게 되는 물리적 디스크 위치를 가리키는 포인터들이 생기기 때문이다.

RRDS 조직은 BDAM(기본 직접 접근 방식)을 대체하기 위해 설계되었다. 어떠한 경우에 BDAM 데이터셋은 데이터셋 이동을 방지하는 포인터를 포함했다. 그러나 대부분의 BDAM 데이터셋은 이러한 포인터들을 포함하지 않았으며, BDAM을 VSAM RRDS로 이동하는 일은 ISAM을 VSAM KSDS로 이동하는 일 보다 덜 매력적이었다.

이후에 선형 데이터셋, VSAM RLS, 트랜잭셔널 VSAM이 뒤이어 추가되었다.

참고 문헌 
  VSAM Demystified
  DFSMStvs Overview and Planning Guide

파일 시스템
파일 포맷