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

Teradata® Parallel Transporter ユーザー ガイド

Product
Parallel Transporter
Release Number
17.10
Release Date
2021年6月
Content Type
ユーザー ガイド
Publication ID
B035-2445-061K-JPN
Language
日本語 (日本)

今日、最も一般的なロード シナリオの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では、メイン インスタンスが、ファイルを読み取ってワーカー インスタンスにデータ行を分配する唯一のインスタンスになるように、DataConnectorオペレータが強化されました。その結果、データ ブロックごとの読み取りが1回のみになり、過剰なI/Oやディスクの競合の問題が発生することなく、複数のワーカー インスタンスで各データ ブロックを処理できるようになっています。

メイン インスタンスは、1つのバッファがデータ行で満杯になると、そのバッファをワーカー インスタンスに送信します。複数のワーカー インスタンスがバッファからのデータを並列に処理している間に、メイン インスタンスは別のバッファへの入力を始めます。すべてのインスタンスがデータ バッファの読み取りまたは処理を完了すると、メイン インスタンスとワーカー インスタンスはバッファを入れ替えます。データ ソースからすべてのデータ行が読み取られるまで同じプロセスが繰り返されます。

ただし、スループット パフォーマンスを最大化するには、Teradata PTジョブのニーズに合うように以下のパラメータを調整する必要があります。
  • RecordsPerBuffer属性
  • インスタンスの数
  • 共有メモリのサイズ

RecordsPerBuffer属性は、メイン インスタンスが各ワーカー インスタンスのデータ バッファに格納できるレコード数をユーザーが定義するための属性です。このデータ バッファは、インスタンス間で共有できるように、共有メモリから割り当てられます。データ取得フェーズ中に、DataConnectorオペレータは、行サイズとRecordPerInstance属性の値に基づいて、同じサイズの3つの共有メモリ バッファを割り当てます。メイン インスタンスは、これらのバッファを使用して、並列的にワーカー インスタンスにデータ行を送ります。これらの共有メモリ バッファを使用するために、"MultipleReaders"機能を使用しているジョブでは、"MultipleReaders"機能を使用していないTPTジョブで必要な共有メモリに加えて、デフォルトではデータ バッファ サイズの6倍以上の共有メモリが必要になります。そのため、メモリ割り当てエラーが発生した場合は、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の1回の"フェッチ"操作でテーブルから最大の行数を抽出できるように、ユーザーが最適なバッファ サイズを設定できるDataBlockSize属性が提供されています。DataBlockSize属性は、DataConnectorオペレータのRecordsPerBuffer属性とまったく同じように機能します。ODBCオペレータは、DataBlockSizeの値を使用して、メイン インスタンスがワーカー インスタンスに並列的にデータ行を送信するための共有メモリ バッファを割り当てます。

DataBlockSizeの値が小さすぎると、メイン インスタンスとワーカー インスタンスの間でバッファの過剰な入れ替わりが発生します。DataBlockSizeの値が大きすぎると、ジョブの共有メモリの上限を超える可能性があります。デフォルトでは、ODBCオペレータは各共有メモリ バッファに2MBを割り当てます。この属性の使用の詳細については、<Teradata® Parallel Transporterリファレンス, B035-2436>の「ODBCオペレータ」を参照してください。