行バッファリングを理解する
AE行バッファリングはパフォーマンスを向上させることができる。 AEは別のOSプロセスで実行されるため、パフォーマンスオーバーヘッドの大部分は、NPSプロセスとAEプロセスの間で行データをマーシャリングするコストである可能性がある。
この性能コストは、転送されるデータ量と、NPS システムと AE 間のデータ往復数に影響される。 OSのプロセス・コンテキスト・スイッチの回数が多いと、パフォーマンスが低下する。
アプリケーション内でこのコストを下げる一つの方法は、各行により多くの情報を入れ、行のサイズを大きくすることである。 この方法は、あらゆるタイプのSQL関数から呼び出されるAEに有効である。 ただし、Netezzaシステムの行サイズは64Kバイトに制限されていることに注意してください。
パフォーマンスを向上させるもう一つの方法は、AE行バッファリングを使用することである。 この機能は、SQLテーブル関数を介して呼び出されたAEにのみ使用できる。 AE行バッファリングは、小さな行を大量に入出力する場合に最も有効である。 有効化されると、AE は自動的に行をバッファに入れ、バッファが一杯になるか、データの終端に達したときのみ、NPS システムと AE の間でバッファを送信する。 AE行バッファリングは、入力行と出力行の両方(フルバッファリング)または出力行のみ(結果のみBバッファリング)に設定できる。
バッファのサイズはNetezzaシステムの内部実装の詳細である。 有用であるには十分な大きさだが、ひとつの関数がメモリリソースを使いすぎるほどには大きくない。 その意味するところは、行バッファリングは(およそ1000バイト以下の)小さなレコードではパフォーマンスを向上させ、大きなレコードではパフォーマンスを低下させるということである。
SELECT t.col1, f.result from mytable t, table WITH
final(mytablefunction(t.col1)) f;AE行バッファリングを使用しない場合、出力f.resultは常にそれを生成した入力t.col11に対応する。 AE行バッファリングの使用は、この対応関係が出力で失われることを意味する。 この対応を必要としないアプリケーションのシナリオはたくさんある、 しかし、それが必要な場合、可能な回避策は、テーブル関数が結果とそれを生成した入力の両方を返し、値が対応するようにすることである。
AE行バッファリングは、AE環境変数NZAE_ROW_BUFFERによって制御される。 詳細は行バッファリングを参照。