前のページ|次のページ

ライブラリ領域の割り当て

ライブラリ領域の割り当て方法

SPD Engineの分割データ読み取りおよびスレッド機能によるパフォーマンスの向上を実現するには、SPD Engineライブラリを正しく構成および管理する必要があります。SAS System管理者はこれらのタスクを最適な形で実行します。
SPD Engineデータセットでは、各種コンポーネントの格納に十分な領域を有するファイルシステムが必要です。多くの場合、そのファイルシステムには、それらのコンポーネントに対する複数のディレクトリが含まれます。通常、シングルディレクトリパス(ファイルシステムの一部)は、ファイルシステム全体のボリューム制限に制約されます。この制限とは、ファイルシステム用に構成されたディスク領域の最大容量です。
この最大ディスク領域の範囲内で、SPD Engineコンポーネントファイルすべてにとって十分な領域を割り当てる必要があります。各ライブラリに必要な記憶容量を見積もるには、各コンポーネントファイルの処理方法を理解しておくことが重要です。

シングルパスのすべてのコンポーネントの領域の構成

最も単純なSPD Engineライブラリ構成では、すべてのSPD Engineコンポーネントファイル(データファイル、メタデータファイルおよびインデックスファイル)が、プライマリパスというシングルパスに存在します。プライマリパスは、LIBNAMEステートメントのデフォルトパス指定です。次のLIBNAMEステートメントでは、MyLibライブラリに対してプライマリファイルシステムが設定されます。
libname mylib spde '/disk1/spdedata';
他のパスオプションが指定されていないため、すべてのコンポーネントファイルがこのプライマリパスに作成されます。すべての種類のコンポーネントファイルをプライマリパスに格納するのは、簡単で、非常に小容量のデータセットでは効果的です。ただし、コンポーネントを別々に格納することによって達成可能なパフォーマンスの向上や、複数のCPUという利点は得られません。
注: SPDEngineでは、完全パス名を指定する必要があります。

コンポーネントファイルの種類別のライブラリ領域の構成

ほとんどのサイトでは、SPD Engineは非常に大容量のデータの管理に使用されます。データには何千もの変数を含められ、その一部にはインデックスを付けられます。それらのサイトでは通常、各種コンポーネントに対して別々の記憶域パスが定義されます。さらに、ディスクストライピングおよびRAID (Redundant Array of Independent Disks)を使用すると、非常に効率的になる可能性があります。詳細については、Scalability and Performanceの“SPD Engine Disk I/O Setup” (http://support.sas.com/rnd/scalability/spde/setup.html)を参照してください。
ライブラリのすべてのデータセットに対するメタデータコンポーネントファイルは、プライマリパスに存在する必要があります。
さらに、データコンポーネントファイルとインデックスコンポーネントファイルに別々のパスを指定すると、パフォーマンスが向上します。別々のパスを指定するのは、読み取り負荷を複数のディスクドライブに分散するためです。データコンポーネントファイルとインデックスコンポーネントファイルを分けておくと、複雑なWHERE評価では特に、ディスクの競合を防ぎ、達成可能な並列処理のレベルを上げるのに役立ちます。次のコード例では、メタデータコンポーネントファイルのプライマリパスが指定されます。このコードでは、DATAPATH=オプションおよびINDEXPATH=オプションを使用して、データコンポーネントファイルとインデックスコンポーネントファイルに対して別々のパスが追加指定されます。
libname all_users spde '/disk1/metadata'  
   datapath= ('/disk2/userdata' '/disk3/userdata')  
   indexpath= ('/disk4/userindexes' '/disk5/userindexes');
メタデータコンポーネントファイルは、プライマリパスのdisk1に格納されます。データコンポーネントファイルはdisk2およびdisk3、インデックスコンポーネントファイルはdisk4およびdisk5です。すべてのパス指定において、完全パス名を指定する必要があります。
注意:
プライマリパスはライブラリごとに一意であることが必要です。
プライマリパスが同じで、その他のパスに相違があるライブラリ参照名を2つ作成した場合、データが失われる可能性があります。NFSはプライマリパス以外のパスでは使用できません。
注: ローカルでマウントされたドライブにデータを格納し、リモートコンピュータからデータにアクセスする場合は、LIBNAMEの指定時にリモートパス名を使用します。/data01および/data02 がlocalAコンピュータにローカルでマウントされたドライブである場合は、LIBNAMEステートメントでパス名/nfs/localA/data01および/nfs/localA/data02を使用します。

コンポーネントファイル別の領域の予想

SPD Engineライブラリ領域を正しく構成するには、SPD Engineコンポーネントファイルの相対サイズについて理解する必要があります。次の情報は概要を示しています。詳細については、Scalability and Performanceの“SPD Engine Disk I/O Setup” (http://support.sas.com/rnd/scalability/spde/setup.html)を参照してください。
メタデータコンポーネントファイルは相対的に小さいファイルですが、指定するプライマリパスは、ライブラリのメタデータコンポーネントファイルをすべて含めるのに十分な大きさにする必要があります。メタデータコンポーネントファイルは、パスで使用可能な領域よりも大きくすることはできません。
インデックスコンポーネントファイル(.idxと.hbxの両方)は、各インデックスの個別の値数、およびインデックスが単一インデックスか複合インデックスかに応じて、中容量から大容量になります。インデックスコンポーネントファイルが、現在のファイルパスで使用可能領域よりも大きくなると、次のパスに新しいインデックスコンポーネントファイルが作成されます。
データコンポーネントファイルは、データ容量と、データセットに指定するパーティションサイズによっては、多数に及ぶ可能性があります。各データパーティションが別々のデータコンポーネントファイルとして格納されます。データパーティションのサイズは、PARTSIZE= LIBNAMEステートメントオプションまたは PARTSIZE=データセットオプションで指定されます。パーティションサイズを指定できるコンポーネントファイルはデータコンポーネントファイルのみです。

メタデータコンポーネントファイルの記憶域

メタデータコンポーネントファイル

SPD Engineデータセットのメタデータコンポーネントファイルには、データセットについての説明的な情報、ならびにその構成データコンポーネントファイルおよびインデックスコンポーネントファイルへのパス名が格納されます。この概念を理解しておくことは非常に重要です。これはデータセット(および関連するメタデータコンポーネントファイル)をライブラリに追加可能かどうかに直接影響するからです。
ライブラリのすべてのデータセットに対するメタデータコンポーネントファイルは、プライマリパスでの指定と同じ場所に存在する必要があります。実質的に、プライマリパスのファイルは、ライブラリ全体に対してディレクトリのように動作します。SPD Engineデータセットにアクセスがあると、SPD Engineはまずデータセットのメタデータコンポーネントファイルを開いて、その属性を決定し、その他のコンポーネントファイルすべてにアクセスできるかどうかを決定します。ライブラリに対して新しいデータセットが作成されるときに、プライマリパス内の領域がいっぱいになっている場合、SPD Engineはそのパスでのメタデータコンポーネントファイルの作成を開始できず、適切なエラーメッセージが出て作成操作が失敗します。この場合、新しいデータセットを正常に作成するには、プライマリパスの領域を解放するか、または新しいライブラリを割り当てて、その新しいライブラリに一部またはすべてのデータセットをコピーする必要があります。データコンポーネントファイルとインデックスコンポーネントファイルには、その制限はありません。データコンポーネントファイルとインデックスコンポーネントファイルには後から追加領域を指定できます。
特定のアクションが原因となって、メタデータコンポーネントファイルが拡張され、ファイルサイズや領域の制限を超過することがあります。その場合、SPD Engineでは、オーバーフローに合わせて、メタデータコンポーネントファイルのパーティションがもう1つ作成されます。新しいメタデータパーティションは、プライマリパスか、METAPATH= LIBNAMEステートメントオプションで指定されたパスに存在します。METAPATH=オプションでは、新しいデータセットの最初のメタデータパーティションの領域を作成することはできません。METAPATH=オプションでは、最初の領域を超えたメタデータコンポーネントファイルにのみ領域が指定されます。

インデックスコンポーネントファイルの記憶域

インデックスコンポーネントファイルはオーバーフロー領域に基づいて格納されます。インデックスコンポーネントファイルが大きくなってファイルサイズや領域制限を超えると、SPD Engineでは、オーバーフローに合わせて、インデックスコンポーネントファイルのパーティションがもう1つ作成されます。INDEXPATH=オプションで複数のファイルパスが指定された場合、最初の使用可能領域でインデックスコンポーネントファイルが作成されて、前のパスがいっぱいになると次のパスにオーバーフローします。メタデータコンポーネントファイルとは違って、インデックスコンポーネントファイルはプライマリパスに置く必要はありません。

データコンポーネントファイルの記憶域

パーティションサイズを指定できるファイルはデータコンポーネントファイルのみです。分割データはスレッドで容易に処理できるので、コンピュータの複数CPUが最大限に活用されます。データコンポーネントファイルのパーティションサイズは固定されています。これはデータセットの作成時に設定されます。デフォルトは128MBですが、PARTSIZE=オプションを使用して異なるパーティションサイズを指定できます。パフォーマンスは適切なパーティションサイズによって決まります。このためデータのサイズと用途を理解しておく必要があります。バランスの取れたオブザベーション数をもたらすパーティションサイズでSPD Engineデータセットを作成できます。(詳細については、PARTSIZE=データセットオプション およびPARTSIZE= LIBNAMEステートメントオプションを参照してください)。 指定データセットの各データパスで多くのデータパーティションを作成できます。SPD Engineでは、DATAPATH=オプションで指定したファイルパスを使用して、パーティションが周期的に分散されます。SPD Engineでは、指定パスの1つに最初のデータパーティション、次のパスに2番目のパーティションというように、順番に作成されます。SPD Engineでは、データセットのすべてのデータパーティションが格納されるまで、必要な回数だけ、ファイルパスで処理が循環します。最初のパーティションに対するファイルパスは、ランダムに選択されます。LIBNAMEステートメントで次のように指定したとします。
datapath=('/data1' '/data2')
SPD Engineでは、/DATA1に最初のパーティション、/DATA2に2番目のパーティション、/DATA1に3番目のパーティション、というように格納されていきます。データパーティションの周期的分散によってディスクストライピングが行われます。これにより非常に効率がよくなる可能性があります。ディスクストライピングの詳細については、Scalability and Performanceの“SPD Engine Disk I/O Setup” (http://support.sas.com/rnd/scalability/spde/setup.html)を参照してください。

パスの初期セット

次の例では、LIBNAMEステートメントで、プライマリパスとしてMYLIBディレクトリが指定されます。このパスはメタデータパーティションの格納に使用されます。データパーティションおよびインデックスパーティションの格納用に他のデバイスおよびディレクトリが指定されます。
libname myref spde 'Mylib'
   datapath=('/mydisk30' '/mydisk31')
   indexpath=('/mydisk36');
MyLibライブラリで作成されたデータセットがすべて、複数のデータパーティションを含めるのに十分な大きさがあると仮定すると、そのすべてのメタデータはMyLibに格納されます。データは/mydisk30および/mydisk31、インデックスは/mydisk36に置かれます。具体的には、それらのデータセットのメタデータコンポーネントファイルにそれらのパス名が含まれます。

後続パスの追加

後からさらに領域が必要になった場合(データをさらに追加する場合など)、次の例のように、追加デバイスをデータパーティションとインデックスパーティションに追加できます。
libname myref spde 'Mylib'
   datapath=('/mydisk30' '/mydisk31' '/mydisk32') 
   indexpath=('/mydisk36' '/mydisk37');
MyLibライブラリで作成されたすべてのデータセットでは、メタデータはMyLibに、データは3つのうち1つ以上のパスに、インデックスはいずれも/mydisk36または/mydisk37に格納されます。データが既存データセットに追加された場合、新しいデータは3つのうち1つ以上のパスに入れられ、それに応じてメタデータコンポーネントファイルが更新されます。
1つ以上のデータパーティションまたはインデックスパーティションに空き領域があまりない場合は、次回の指定時にLIBNAMEステートメントで除外できます。
libname myref spde 'Mylib'
   datapath=('/mydisk31' '/mydisk32' '/mydisk33') 
   indexpath=('/mydisk37' '/mydisk38');
データセットのメタデータには使用パスがすべて含まれるため、SPD Engineでは、除外されたパスを使用するデータセットでもアクセスできます。

パスの省略

ライブラリ内のデータセットのみ読み取る必要がある場合、必要なパス情報はすべてメタデータコンポーネントファイルにすでに存在するので、追加のDATAPATH=およびINDEXPATH=オプションなしでLIBNAMEステートメントを指定できます。
libname myref spde 'Mylib';

コンポーネントファイルの名前変更、コピー、移動

注意:
SPD Engineのデータセットやそのコンポーネントファイルの名前変更、コピー、移動にはオペレーティングシステムコマンドを使用しないでください。
ある場所から別の場所にSPD EngineデータセットをコピーするにはCOPYプロシジャ、SPD Engineデータセットの名前変更や削除にはDATASETSプロシジャを常に使用してください。
前のページ|次のページ|ページの先頭へ