仮想ストレージアクセス方式( VSAM ) [ 1 ]は、IBM の直接アクセスストレージデバイス(DASD) ファイルストレージアクセス方式であり、最初にOS/VS1、OS/VS2リリース 1 (SVS) およびリリース 2 (MVS) オペレーティング システムで使用され、後にマルチプル仮想ストレージ(MVS) アーキテクチャ全体で使用され、現在はz/OSで使用されています。元々はレコード指向ファイルシステムであった VSAM [ NB 2 ]は、キーシーケンス(KSDS)、相対レコード(RRDS)、エントリシーケンス(ESDS)、および線形(LDS)の 4 つの[ NB 2 ]データ セット編成で構成されています。[ 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種類のエントリで構成されます。制御インターバル内の空き領域は常に連続しています。
レコードが制御区間に挿入されると、他のレコードとの相対的な正しい順序で配置されます。このため、制御区間内のレコードを移動する必要がある場合があります。逆に、レコードが削除されると、空き領域が連続するように、後続のレコードが下に移動します。制御区間にレコードを挿入するのに十分な空き領域がない場合、制御区間は分割されます。レコードの約半分は元の制御区間に格納され、残りのレコードは新しい制御区間に移動されます。新しい制御区間は、元の制御区間と同じ制御領域内の空き制御区間のプールから取得されます。その制御領域内に空き制御区間が残っていない場合、制御領域自体が分割され、制御区間は古い制御領域と新しい制御領域に均等に分配されます。
VSAMでは、レコード指向のファイル編成として3つのタイプを使用できます(線形データセットの内容にはレコード構造はありません)。
エントリ順序データセット( ESDS ) は、 VSAM でサポートされているデータセット編成の一種です。 [ 2 ] レコードは、ファイルに書き込まれた順序、つまりシーケンシャルな順序に基づいてアクセスされます。[ 8 ] [ 9 ] [ 10 ]つまり、特定のレコードにアクセスするには、レコードが見つかるまですべてのレコードを順番に検索するか、相対バイトアドレス[ NB3 ] (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 ]
相対レコードデータセット(RRDS) は、 VSAM でサポートされているデータセット編成の一種です。 [ 2 ] レコードは、ファイル内の順序位置 (相対レコード番号、RRN) に基づいてアクセスされます。[ 23 ]例えば、アクセスしたいレコードは、合計 999 レコードのうち、ファイルの 42 番目のレコードである可能性があります。RRDS の概念はシーケンシャルアクセス方式に似ていますが、ランダムアクセスとダイナミックアクセスでデータにアクセスできます。
RRDSは、レコード番号がデータセット内のレコードの論理的な位置を示す、順序付けられたデータレコードで構成されます。[ 24 ] プログラムは、この位置番号を使用してレコードにランダムにアクセスしたり、レコードに順次アクセスしたりできます。[ 25 ] しかし、キー順序付きデータセットとは異なり、RRDSにはキーがないため、プログラムはキー値でレコードにアクセスすることはできません。
線形データセット( LDS) は、VSAM でサポートされているデータセット編成の一種です。[ 2 ] LDS の制御間隔サイズは 4096 バイトから 32768 バイトまでで、4096 バイト刻みです。[ 26 ] [ 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領域とバッチジョブ間でデータを共有するには、トランザクションVSAM(DFSMStvs)が必要です。これは、基盤となるz/OSシステムサービスを使用して、ログ記録と2フェーズコミットを追加することでVSAM RLSを拡張するオプションプログラムです。これにより、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 – エントリ順序付きデータセット)
レコードが入力された順序で格納されます。
エントリ順序付けデータセットにはインデックスコンポーネントは含まれていませんが、代替インデックスは許可されています。これらのRBAを追跡するために代替インデックスを作成できます。
このインデックスはB+ツリーと呼ばれます。
では、NSR または LSR/GSR 用の VSAM データ セットを共有する際の考慮事項について説明しています。