単一データ ソースの並列読み取り - Parallel Transporter

Teradata Parallel Transporter ユーザー ガイド

Product
Parallel Transporter
Release Number
16.20
Published
2018年4月
Language
日本語
Last Update
2018-09-07
dita:mapPath
ja-JP/eho1512702793064.ditamap
dita:ditavalPath
ja-JP/eho1512702793064.ditaval
dita:id
B035-2445
Product Category
Teradata Tools and Utilities

今日、最も一般的なロード シナリオの1つは、単一データ ソースのデータをデータ ウェアハウスにロードすることです。 この単一データ ソースには、ファイル、ODBCテーブル、メッセージ キュー(MSMQなど)、名前付きパイプのデータなどが含まれます。

Teradata PTは、その並列かつスケーラブルなアーキテクチャにより、データをロードするための追加のCPU電力を利用し、複数のデータ ストリームをデータ抽出処理の並列化に使用できるようにすることができます。 このアーキテクチャは、並列かつスケーラブルな方法で単一データ ソースを読み取るためのData ConnectorオペレータおよびODBCオペレータなどのProducerオペレータの基盤を提供します。

Data Connectorの複数のインスタンスでファイルを読み取るように指定するには、“MultipleReaders"属性を“Yes"に設定します。 Teradata PT 15.0以前では、“MultipleReaders"のサポートには各インスタンスが同じファイルを読み取り、ファイルの行のサブセットを処理する必要があります。 これによりデータが同時に読み取られスケーラブルなパフォーマンスが実現されますが、I/OおよびCPUのサイクルが過剰になり、インスタンスが相互に同期化されない場合は、I/Oの遅延(一部のインスタンスがその他のインスタンスより先に実行するなど)が発生する可能性があります。 この“非同期"の問題が発生した場合、データ ブロックの読み取りはI/Oシステムのファイル キャッシュから実行されないことがあるため、複数のインスタンスによる同じデータ ブロックの複数の読み取りによるI/Oオーバーヘッドが発生します。

Teradata PT 15.0では、マスター インスタンスがファイルを読み取る唯一のインスタンスになり、データ行をスレーブ インスタンスに分散するように、Data Connectorオペレータが拡張されました。 その結果、データ ブロックごとに1つの読み取りのみが存在し、データの各ブロックが複数のスレーブ インスタンスによって処理可能です。 過剰なI/Oやディスクの競合問題は発生しません。

マスター インスタンスはバッファをデータ行に入力し終えると、そのバッファをスレーブ インスタンスに送信します。 スレーブ インスタンスがバッファからのデータを同時に処理しているとき、マスター インスタンスは別のバッファの入力を開始します。 すべてのインスタンスがデータ バッファの読み取りまたは処理を終えると、マスター インスタンスとスレーブ インスタンスはバッファをスワップし、すべての行がデータ ソースから読み取られるまで同じプロセスが繰り返されます。

ただし、スループット パフォーマンスを最大化するためには、次のパラメータをTeradata PTジョブのニーズに合うように調整する必要があります。

  • RecordsPerBuffer属性
  • インスタンスの数
  • 共有メモリのサイズ

RecordsPerBuffer属性は、ユーザーが、マスター インスタンスがスレーブ インスタンスごとにデータ バッファに格納できるレコード数を定義するためのものです。このデータ バッファは、インスタンス間で共有できるように共有メモリから割り当てられます。データ取得フェーズで、DataConnectorオペレータは、行サイズとRecordPerInstance値に基づいて同じサイズの3つの共有メモリ バッファを割り当てます。マスター インスタンスは、これらのバッファを使用して、行を同時にスレーブ インスタンスに送信します。これらの共有メモリ バッファの使用により、"MultipleReaders"機能を使用するジョブにはデフォルトで少なくとも(6 x データ バッファ サイズ)バイトの共有メモリが必要になります。"MultipleReaders"機能を使用しないTPTジョブに必要な共有メモリに加えて必要です。 そのため、メモリの割り当てエラーが発生した場合はtbuild -hランタイム パラメータを利用して、ジョブに対して予約されている共有メモリ量を増やす必要があります。 tbuild -hオプションの使用については、<Teradata Parallel Transporterリファレンス, B035-2436>のTeradata PTユーティリティ コマンドの章を参照してください。

RecordsPerBufferの最適値を取得するためには、行サイズ、インスタンス数、共有メモリのサイズに基づいて調整する必要があります。 値が低すぎる場合、マスター インスタンスとスレーブ インタンス間の過剰なバッファ スワップのためにパフォーマンスが低下します。 値が高すぎると、ジョブに対する共有メモリの最大限度を超える可能性があります。 この属性の使用については、<Teradata Parallel Transporterリファレンス、B035-2436>のDataConnectorオペレータの章を参照してください。

スケーラビリティと並列処理を向上させるため、APPLY-SELECT文のオペレータのインスタンス数を調整することができます。 インスタンスの数が多ければ通常はスループット パフォーマンスが向上しますが、必要以上のインスタンスを使用した場合はCPU、セマフォ、共有メモリなどのシステム リソースを消費するため、パフォーマンスが低下する可能性があります。 オペレータに対し最適なインスタンス数を選択する方策については、ベスト プラクティスジョブ レベルにおけるシステム リソースの使用状況の判定を参照してください。

Data Connectorオペレータと同様に、ODBCオペレータもユーザーが複数のインスタンスを含む単一ODBCテーブルからデータを抽出できるようにします。 Data ConnectorオペレータとODBCオペレータの唯一の違いは、前者が単一ファイルを読み取り、後者が単一ODBCテーブルを読み取ることです。 両方のオペレータは共有メモリ バッファ並列処理を使用してデータ ソースのシーケンシャル読み取り速度を最大化します。 Data Connectorのスループット パフォーマンスはファイル システムのI/O効率性によって制限され、ODBCオペレータのスループット パフォーマンスは単一のODBC “取り出し" 操作でODBCテーブルから抽出可能な行の最大数によって異なります。

“取り出し"の効率性を促進するため、 ODBCオペレータはユーザーが最適なバッファ サイズを設定して、単一のODBC“取り出し"操作で最大行数をテーブルから抽出できるようにするためのDataBlockSize属性を提供します。 DataBlockSize属性は、Data ConnectorオペレータのRecordsPerBufferと同じように機能します。 ODBCオペレータはDataBlockSize値を使用して、マスター インスタンスの共有メモリ バッファを割り当て、行を同時にスレーブ インスタンスに送信します。

DataBlockSize値が低すぎる値に設定されると、マスター インスタンスとスレーブ インスタンスの間のバッファの過剰なスワッピングが発生します。 DataBlockSize値が高すぎる値に設定されると、ジョブに対する共有メモリの最大限度を超える可能性があります。 デフォルトで、ODBCは共有メモリ バッファごとに2メガバイト割り当てます。 この属性の使用については、<Teradata Parallel Transporterリファレンス、B035-2436>のODBCオペレータの章を参照してください。