仮想記憶アクセス方式( VSAM ) [ 1 ]はIBM の 直接アクセス記憶装置( DASD ) ファイル記憶アクセス方式であり、最初にOS/VS1、 OS/VS2リリース 1 ( SVS ) およびリリース 2 ( MVS ) オペレーティング・システムで使用され、後に多重仮想記憶( MVS ) アーキテクチャー全体で使用され、現在はz/OSで使用されています。もともとレコード指向ファイルシステムであった VSAM は、[ NB 2 ] 4つのデータ・セット編成(キー順( KSDS )、相対レコード( RRDS )、入力順( ESDS )、線形( LDS ))で構成されています。[ 2 ] KSDS、 RRDS、 ESDS 編成にはレコードが含まれ、 LDS 編成 ( 後に VSAM に追加 ) にはメモリ・マップ・ファイルとして使用するための、 固有のレコード構造を持たないページのシーケンスが含まれます。
IBM Redbook「VSAM PRIMER」(特に「Virtual Storage Access Method (VSAM) Options for Advanced Applications」マニュアルと併用する場合)には、VSAMを利用するために必要な概念が説明されています。[ 3 ] IBMは公式ドキュメントでデータセットという用語をファイルの同義語として使用し、直接アクセス記憶装置(DASD)は、テープドライブなどの順次読み取りしかできないデバイスではなく、ディスクドライブなどのデータの場所にランダムにアクセスするデバイスに対して使用します。
VSAMレコードは固定長または可変長にすることができます。これらは制御インターバル(CI)と呼ばれる固定サイズのブロック[ 4 ] [ 5 ]に編成され、さらに制御域(CA)と呼ばれるより大きな区画に分割されます。制御インターバルのサイズはバイト単位(例えば4キロバイト )で測定され、制御域のサイズはディスクトラックまたはシリンダー単位で測定されます。制御インターバルはディスクとコンピュータ間の転送単位であるため、読み取り要求は1つの制御インターバル全体を読み取ります。制御域は割り当て単位であるため、VSAMデータセットを定義すると、整数個の制御域が割り当てられます。
アクセス方式サービス・ユーティリティ・プログラムIDCAMSは、VSAMデータセットの操作(「削除と定義」)によく使用されます。カスタムプログラムは、ジョブ制御言語(JCL)のデータ定義(DD)ステートメント、動的割り当て、または顧客情報管理システム(CICS) などのオンライン領域を介してVSAMデータセットにアクセスできます。
IMS/DB [要出典]とDb2 [ 6 ] [ 7 ]はどちらもVSAM上に実装されており、その基礎となるデータ構造を使用しています。
VSAM データ セットの物理的な構成は、次のように、他のアクセス方法でサポートされる構成とは大きく異なります。
VSAM ファイルは、VSAM コンポーネントのクラスターとして定義されます (たとえば、KSDS の場合は DATA コンポーネントと INDEX コンポーネント)。
VSAMコンポーネントは、固定長の物理ブロックで構成され、固定長の制御インターバル[ 4 ] [ 5 ] (CI)と制御域(CA)にグループ化されています。CIとCAのサイズはアクセス方式サービス(AMS)によって決定され、通常、それらの使用方法はユーザーには見えません。各制御域には、一定数の制御インターバルが存在します。
制御インターバルには通常、複数のレコードが含まれます。レコードは、制御インターバル内に下位アドレスから上向きに格納されます。制御情報は、制御インターバルの反対側に、上位アドレスから下向きに格納されます。レコードと制御情報の間のスペースは空きスペースです。制御情報は、常に存在する制御インターバル記述子フィールド (CIDF) と、制御インターバル内にレコードが存在する場合に存在し、関連するレコードの長さを記述するレコード記述子フィールド (RDF) の2種類のエントリで構成されます。CI内の空きスペースは常に連続しています。
レコードが制御インターバルに挿入されると、それらのレコードは他のレコードに対して正しい順序に配置されます。このため、制御インターバル内でレコードを移動させる必要がある場合があります。逆に、レコードが削除されると、後続のレコードが下に移動され、フリー・スペースが連続したままになります。制御インターバル内にレコードを挿入するための十分なフリー・スペースがない場合、制御インターバルは分割されます。レコードのおよそ半分が元の制御インターバルに保管され、残りのレコードは新しい制御インターバルに移動されます。新しい制御インターバルは、元の制御インターバルと同じ制御域内のフリー制御インターバルのプールから取得されます。その制御域内にフリー制御インターバルが残っていない場合、制御域自体が分割され、制御インターバルは古い制御域と新しい制御域の間で均等に分配されます。
VSAM では、次の 3 種類のレコード指向ファイル編成を使用できます (線形データ セットの内容にはレコード構造がありません)。
入力順データセット(ESDS )は、 VSAMがサポートするデータセット編成の一種です。 [ 2 ] レコードは、その順序、つまりファイルに書き込まれた順序に基づいてアクセスされます。[ 8 ] [ 9 ] [ 10 ]つまり、特定のレコードにアクセスするには、そのレコードが見つかるまですべてのレコードを順番に検索するか、相対バイトアドレス[ NB 3 ] (RBA)、つまりファイルの先頭から読み取りを開始するバイト数を使用して検索する必要があります。[ 11 ]
レコードは内容に関係なくロードされ、バイト アドレスは変更できません。
ESDSにはキーがありませんが、代替索引(AIX)を定義してフィールドをキーとして使用できるようにすることができます。[ 12 ] 代替索引自体はKSDSです。
キー順データセット(KSDS)は、VSAMがサポートするデータセットの一種です。KSDSデータファイルの各レコードには、固有のキーが埋め込まれています。[ 13 ] KSDSは、データコンポーネントと、システムがキー値によってデータファイル内のレコードを物理的に特定できるようにするインデックスコンポーネントと呼ばれる独立したインデックスファイルの2つの部分で構成されています。 [ 14 ]データコンポーネントとインデックスコンポーネントを合わせてクラスターと呼びます。[ 15 ]
レコードはランダムまたは順番にアクセスでき、可変長にすることができます。
VSAMデータセットであるKSDSのデータと索引の構成要素は、制御インターバル[ 16 ]で構成され、制御インターバルはさらに制御域に編成されます。[ 17 ] KSDSにレコードがランダムに追加されると、制御インターバルがいっぱいになり、2つの新しい制御インターバルに分割する必要があります。それぞれの新しい制御インターバルには、レコードの約半分が割り当てられます。同様に、制御域内の制御インターバルが使い果たされると、制御域は2つの新しい制御域に分割され、それぞれの新しい制御域には、制御インターバルの約半分が割り当てられます。[ 18 ]
基本的なKSDSにはキー(主キー)が1つしかありませんが、代替インデックスを定義して追加のフィールドをセカンダリキーとして使用できるようにすることができます。[ 19 ]代替インデックス自体もKSDSです。[ 20 ]
KSDSで使用されるデータ構造は現在B+ツリーとして知られています。[ 21 ] [ 22 ]
相対レコード・データセット(RRDS)は、 VSAMがサポートするデータセット編成の一種です。 [ 2 ] レコードは、ファイル内の順序位置(相対レコード番号、RRN)に基づいてアクセスされます。[ 23 ]例えば、アクセスしたいレコードは、ファイル内の999レコード中42番目のレコードである場合があります。RRDSの概念はシーケンシャル・アクセス方式に似ていますが、ランダム・アクセスと動的アクセスの両方でデータにアクセスできます。[説明が必要]
RRDSは連続したデータレコードで構成され、レコード番号はデータセット内のレコードの論理位置を示します。[ 24 ] プログラムはこの位置番号を使用してレコードにランダムにアクセスすることも、レコードに連続してアクセスすることもできます。[ 25 ] ただし、キー順データセットとは異なり、RRDSにはキーがないため、プログラムはキー値でレコードにアクセスすることはできません。
線形データセット( LDS)は、 VSAMがサポートするデータセット編成の一種である。 [ 2 ] LDSの制御間隔のサイズは4096バイトから32768バイトまでで、[ 26 ] 4096バイト単位で増加する。[ 27 ] LDSには埋め込まれた制御情報がなく、制御情報が含まれていないため、LDSに個々のレコードが含まれているかのようにアクセスすることはできない。[ 28 ]
LDS内のアドレス指定は相対バイトアドレス(RBA)によって行われ、IBM Db2やオペレーティングシステムなどのシステムで使用できます。[説明が必要]この利点は、OSなどのシステムが複数のディスクスピンドルにアクセスし、それを単一のストレージ実装として認識できることです。ただし、この方法には、高次の抽象化レベルでは特に有用ではないという制限があります。[独自の研究? ] Data In Virtual [ 29 ] (DIV) とWindowサービス[ 30 ]は、CIサイズが4096のLDSにアクセスするためにVSAMを直接使用する代替手段を提供します。
VSAM データへのアクセス手法には 4 つの種類があります。
CICSリージョン間でのVSAMデータの共有は、VSAMレコードレベル共有(RLS)によって実現できます。これにより、レコードのキャッシュと、さらに重要な点としてレコードのロックが追加されます。ログ記録とコミット処理はCICSが担うため、CICS環境外でのVSAMデータの共有は厳しく制限されます。
CICSリージョンとバッチジョブ間の共有には、Transactional VSAM(DFSMStvs)が必要です。これは、基盤となるz/OSシステムサービスを使用して、VSAM RLSにロギングと2フェーズコミットを追加することで構築されたオプションプログラムです。これにより、VSAMデータの汎用的な共有が可能になります。
VSAMは、従来のアクセス方式[ 33 ]の代替として導入され、機能の追加、使いやすさの向上、パフォーマンスとデバイス依存性の問題の克服を目的としていました。VSAMは、IBMがSystem/360コンピュータシリーズで動作していたDOS/360およびOS/360オペレーティングシステムの後継として、新しいSystem/370シリーズ用の仮想記憶オペレーティングシステム(DOS/VS、OS/VS1、OS/VS2)を発表した1970年代に導入されました。下位互換性は維持されていましたが、従来のアクセス方式は、仮想記憶に必要なアドレス変換が原因でパフォーマンス上の問題を抱えていました。
KSDS構造は、 ISAM(索引順次アクセス方式)の代替として設計されました。ディスク技術の変化により、ISAMデータセット内のデータ検索は非常に非効率になりました。また、ISAMデータセットには物理ディスク位置へのポインタが埋め込まれており、データセットを移動すると無効になるため、移動も困難でした。IBMは、ISAMを使用するようにコーディングされたプログラムでKSDSを使用できるように、互換性インターフェースも提供しました。
RRDS構造は、 BDAM(基本直接アクセス方式)を置き換えるために設計されました。BDAMデータセットには、移動を妨げる埋め込みポインタが含まれている場合もありました。しかし、ほとんどのBDAMデータセットには埋め込みポインタが含まれていなかったため、BDAMからVSAM RRDSへの移行は、ISAMからVSAM KSDSへの移行に比べてはるかに魅力的ではありませんでした。
その後、線形データ セットが追加され、続いて VSAM RLS、トランザクション VSAM が追加されました。
シーケンシャル(VSAM ESDS – エントリシーケンスデータセット)[リンク切れ]
ESDS VSAMデータセットには、入力された順序でレコードが格納されます。
入力順データセットには索引コンポーネントは含まれませんが、代替索引を使用できます。これらのRBAを追跡するために、代替索引を作成できます。
インデックスはB+ツリーと呼ばれます。
NSRまたはLSR/GSRのVSAMデータセットの共有に関する考慮事項について説明しています。